【问题标题】:JS Array with arrays of objects - Group and sum properties带有对象数组的 JS Array - Group 和 sum 属性
【发布时间】:2019-03-06 17:06:48
【问题描述】:

我有一个数组,里面有多个数组,包含对象(来自 HTTP 请求的响应)

大数组:

datas = [
   [
     {
       data: {
         pid: 107,
         value: 5
       }
       status: 200
     },
     {
       data: {
          pid: 108,
          value: 42
       }
     }
   ],
   [
     {
       data: {
         pid: 107,
         value: 64
       }
       status: 200
     },
     {
       data: {
          pid: 108,
          value: 322
       }
     }
   ]
]

好的,那么我怎样才能创建一个按 pid 分组的新数组(或对象)和一个带有分配给 pid 的值的总和? 这不是在数组数组中按属性求和的典型问题。

我尝试过的:

 datas.forEach((d,k1) => { 
   d.forEach((e,k2) => {
   total += e.data.value
   newArr[k2] = total;
  })
})

【问题讨论】:

标签: javascript arrays


【解决方案1】:

您可以使用Array.prototype.reduce 和内部Array.prototype.forEach 来迭代内部数组并将PID 分组到Object:

const data = [
   [
     {
       data: {
         pid: 107,
         value: 5
       },
       status: 200
     },
     {
       data: {
          pid: 108,
          value: 42
       }
     }
   ],
   [
     {
       data: {
         pid: 107,
         value: 64
       },
       status: 200
     },
     {
       data: {
          pid: 108,
          value: 322
       }
     }
   ]
];

const merged = data.reduce((merged, innerArr) => {
  innerArr.forEach(({data}) => {
    merged[data.pid] = (merged[data.pid] || 0) + data.value;
  });
  return merged;
}, {});

console.log(merged);

【讨论】:

  • 最后。我不知道如何对数组中的对象使用 reducer 函数。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-01-11
  • 2023-01-26
  • 2018-03-01
  • 2019-11-29
  • 2017-11-03
  • 2019-04-07
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多