在数组中按键合并相似的对象

Merge similar objects by key in array

我想合并相似的对象并合并数量。

我的阵列:

result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
]

我做了什么:

 result = result.reduce((sum, val) => {
      for (let i in sum) {
          if (sum[i].itemNumber === val.itemNumber) {
              return sum 
          }
      }
      sum.push(val);
      return sum;
  }, []);

我的预期结果:

result = [
    {itemNumber:'1288',quantity:1000},
    {itemNumber:'3298',quantity:1000},
    ]

如果有一种方法可以用 lodash 做到这一点,我想知道,因为我找不到。

感谢您的帮助。

您可以将总计存储在对象中并将它们转换回数组。但是,在这种方法中,您应该注意到元素的顺序可能会改变。

const input = [
  {itemNumber:'1288',quantity:700},
  {itemNumber:'3298',quantity:1000},
  {itemNumber:'1288',quantity:300}
];

// stores itemNumber, totalQuantity pairs.
// Example: {'1288': 1000, '3298': 1000} 
const totals = input.reduce((acc, val) => {
  const key = val.itemNumber;
  const { quantity } = val;
  const totalSoFar = acc[key] || 0;
  return {...acc, [key]: totalSoFar + quantity};
}, {});

const result = Object.entries(totals)
  .map(([itemNumber, quantity]) => ({itemNumber, quantity}));
console.log(result);

你可以试试这个,跟你的代码差不多

result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
];

let rt = Object.values(result.reduce((acc, v) => {
   if (!acc[v.itemNumber]) {
       acc[v.itemNumber] = {id: v.itemNumber, quantity: 0};
   }
   acc[v.itemNumber].quantity += v.quantity;
   return acc;
}, {}));




console.log(rt);