【问题标题】:Structuring an array the correct way with lodash groupBy使用 lodash groupBy 以正确的方式构建数组
【发布时间】:2020-01-17 13:28:38
【问题描述】:

我有一个看起来像这样的对象:

{
    data: [
        { id: "1", state: "accepted", estimate_date: "2019-12-17" },
        { id: "2", state: "rejected", estimate_date: "2019-12-17" },
        { id: "3", state: "open", estimate_date: "2019-12-17" },
        { id: "4", state: "open", estimate_date: "2019-12-18" },
        { id: "5", state: "rejected", estimate_date: "2019-12-18" },
        { id: "6", state: "accepted", estimate_date: "2019-12-18" },
    ]
}

当我在这样的对象上使用 lodash groupBy 时:

const key = 'data';
const groupedEstimates = groupBy(estimateData[key], 'estimate_date');

返回:

[
  [
    "2019-12-17"
  ],
  [
      [ { id: "1", state: "accepted" } ],
      [ { id: "2", state: "rejected" } ],
      [ { id: "3", state: "open" } ]
  ]
],

[
  [
    "2019-12-18"
  ],
  [
      [ { id: "4", state: "open" } ],
      [ { id: "5", state: "rejected" } ],
      [ { id: "6", state: "accepted" } ]
  ]
]

但现在我正在尝试实现这样的目标:

[
  {
    date: "2019-12-17",
    items: [
      { id: "1", state: "accepted" },
      { id: "2", state: "rejected" },
      { id: "3", state: "open" },
    ]
  },
  {
    date: "2019-12-18",
    items: [
      { id: "4", state: "open" },
      { id: "5", state: "rejected" },
      { id: "6", state: "accepted" },
    ]
  }
]

除非我不知道如何使用 lodash 来实现。它不必使用 lodash,但我只在开始时使用它,因为它似乎是解决我的问题的简单方法。现在我正在尝试实现更合理的数据结构,我想了解如何实现它。

【问题讨论】:

    标签: javascript arrays data-structures lodash javascript-objects


    【解决方案1】:

    estimate_date 属性分组后,使用_.map() 迭代组对象。通过获取date 属性的键(第二个参数)并映射items 以省略estimate_date,生成组对象:

    const estimateData = {"data":[{"id":"1","state":"accepted","estimate_date":"2019-12-17"},{"id":"2","state":"rejected","estimate_date":"2019-12-17"},{"id":"3","state":"open","estimate_date":"2019-12-17"},{"id":"4","state":"open","estimate_date":"2019-12-18"},{"id":"5","state":"rejected","estimate_date":"2019-12-18"},{"id":"6","state":"accepted","estimate_date":"2019-12-18"}]}
    
    const groupedEstimates = _.map(
      _.groupBy(estimateData.data, 'estimate_date'),
      (items, date) => ({
        date,
        items: items.map(o => _.omit(o, 'estimate_date'))
      })
    )
    
    console.log(groupedEstimates)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

    【讨论】:

    • 我不得不将其更改为 estimateData['data'] 或在我的情况下为 estimateData[key],因为我已经声明过。您的其余答案完全符合我的要求。谢谢。
    • 无论哪种方式都与解决方案无关。这就是我改变的原因——以减少混乱。不客气:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多