【问题标题】:How to get array of objects with unique values?如何获取具有唯一值的对象数组?
【发布时间】:2019-06-07 05:40:18
【问题描述】:

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

我有这个数组:

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]

【问题讨论】:

  • 您的 "like this" 数组不是有效的 JavaScript。因此,在人们开始尝试回答您的问题之前,请对其进行编辑并明确您的预期结果。

标签: javascript arrays javascript-objects


【解决方案1】:

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

您可以使用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)

【讨论】:

  • @sandrooco 请确保您在编辑时不要更改答案上下文
  • @Shubh 在这种情况下更改答案上下文意味着什么?
  • 当我赞成答案正常工作时,在你编辑后它开始给 Nan,我不太清楚你编辑的内​​容@sandrooco
  • @brk,我猜这个问题要求数组,你的结果返回一个对象,可能用户想要两个暗淡的数组?
  • 1.是其他人的编辑给了NaN。 2. 您可以点击“x 分钟前编辑”查看所有编辑。 3. 与上下文无关,只是无法正常工作。 4. 我想@Kate 需要一个对象来了解类别的键。
猜你喜欢
  • 2021-12-30
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2019-01-03
  • 1970-01-01
  • 2019-12-18
相关资源
最近更新 更多