【问题标题】:typescript: grouping in multidimensional array of objects (by id)打字稿:在对象的多维数组中分组(按id)
【发布时间】:2019-07-10 19:15:18
【问题描述】:

我需要帮助来实现以下函数定义:

我不知道如何处理这样的多维数组

输入(按日期分组)

[
  {date: 1552489200000, data: [{id: 1, value:100}, {id: 2, value: 101}]},
  {date: 1552575600000, data: [{id: 1, value:102}, {id: 2, value: 103}]},
  {date: 1552662000000, data: [{id: 1, value:104}]},
]

输出(按 ID 分组)

[
  {id:1, data: [{date: 1552489200000, value: 100}, {date: 1552575600000, value: 102}, {date: 1552662000000, value: 104}]},
  {id:2, data: [{date: 1552489200000, value: 101}, {date: 1552575600000, value: 103}]},
]

const changeDataOrg = (
  groupByDate: { date: number; data: { id: number; value: number }[] }[],
): { id: number; data: { date: number; value: number }[] }[] => {
  const groupById = [];
  return groupById;
};

【问题讨论】:

    标签: javascript arrays typescript group-by reduce


    【解决方案1】:

    您可以使用reduceforEach

    我们根据 id 创建键,然后 kepp 将值相应地推入。如果键已经存在,则我们在特定键的数据数组中推送新条目,否则,我们添加一个带有值的新键。最后我们从输出对象中取出值。

    let data = [{date: 1552489200000, data: [{id: 1, value:100}, {id: 2, value: 101}]},{date: 1552575600000, data: [{id: 1, value:102}, {id: 2, value: 103}]},{date: 1552662000000, data: [{id: 1, value:104}]},]
    
    let output = data.reduce((out,{date, data})=>{
      data.forEach(({id, value }) => {
        let data = {date,value}
        out[id] ? out[id].data.push(data) : out[id]={id,data:[data]}
      })
      return out
    },{})
    
    console.log(Object.values(output))

    【讨论】:

    • 对不起,我忘记点击了,我现在才点击,很抱歉,您可以在代码中添加一些 cmets 以便我更容易理解吗?非常感谢
    猜你喜欢
    • 2019-11-26
    • 2020-07-18
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多