首页 > 解决方案 > 计算对象数组中的重复项

问题描述

我有一个数组。如何按类型、名称和大小以及增量查找重复项。并在增加数量后删除相同的数量。

[
    {
        "name": "Pizza with pepper",
        "imageUrl": "...",
        "type": 0,
        "size": 26,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Pizza with pepper",
        "imageUrl": "...",
        "type": 1,
        "size": 40,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Peperoni",
        "imageUrl": "...",
        "type": 0,
        "size": 30,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Peperoni",
        "imageUrl": "...",
        "type": 0,
        "size": 30,
        "price": "803",
        "amount": 1
    }
]

标签: javascriptarraysjson

解决方案


const data = [
    {
        "name": "Pizza with pepper",
        "imageUrl": "...",
        "type": 0,
        "size": 26,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Pizza with pepper",
        "imageUrl": "...",
        "type": 1,
        "size": 40,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Peperoni",
        "imageUrl": "...",
        "type": 0,
        "size": 30,
        "price": "803",
        "amount": 1
    },
    {
        "name": "Peperoni",
        "imageUrl": "...",
        "type": 0,
        "size": 30,
        "price": "803",
        "amount": 1
    }
];

const merged = data.reduce((agg, item) => {
  const key = `${item.name}-${item.type}-${item.size}`;
  if (agg[key]) {
     agg[key].amount += item.amount;
  } else {
     agg[key] = item;
  }
  return agg;
}, {});

const result = Object.values(merged);
console.log(result);


推荐阅读