具有对象数组的JS数组-组和总和属性

时间:2019-03-06 17:06:49

标签: javascript arrays

我有一个包含多个数组的数组,其中包含对象(来自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的值求和? 这不是在数组内部具有SUM by属性的典型问题。

我尝试过的事情:

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

1 个答案:

答案 0 :(得分:2)

您可以将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);