如何获得具有唯一值的对象数组?

时间:2019-06-07 05:40:18

标签: javascript arrays javascript-objects

如何对具有相同键值的对象数组求和?

我有这个数组:

let arrData = [{ category: "Main Expenses", amount: 420 },
    { category: "Food", amount: 50 },
    { category: "Main Expenses", amount: 4530},
    { category: "Food", amount: 4520 },
    { category: "Main Expenses", amount: 4530 },
    { category: "Food", amount: 450 },
    { category: "Self Care", amount: 7540 },
    { category: "Child Care", amount: 4570 }]

我需要获得具有唯一类别的数组,如下所示:

[Main Expenses: 9480,
Food: 5020,
Self Care: 7540,
Child Care: 4570]

1 个答案:

答案 0 :(得分:2)

由于数组不支持键和值对,因此不可能在数组中提供预期的输出。您可以选择对象。

您可以使用reduce并按类别名称检查对象是否包含key。如果是这样,则添加金额,否则按类别名称创建键并将其值设置为金额

let arrData = [{
    category: "Main Expenses",
    amount: 420
  },
  {
    category: "Food",
    amount: 50
  },
  {
    category: "Main Expenses",
    amount: 4530
  },
  {
    category: "Food",
    amount: 4520
  },
  {
    category: "Main Expenses",
    amount: 4530
  },
  {
    category: "Food",
    amount: 450
  },
  {
    category: "Self Care",
    amount: 7540
  },
  {
    category: "Child Care",
    amount: 4570
  }
]

let newData = arrData.reduce((acc, item) => {
  acc[item.category] = acc[item.category] ?
    acc[item.category] + item.amount :
    item.amount;
  return acc;
}, {});

console.log(newData)