javascript - 按键合并对象并添加值Javascript

标签 javascript arrays object

我需要获取一个数组并将具有相同键的所有对象组合在一起,然后将值相加以创建单个对象(如果键匹配)。

这是我的数组示例:

var arr = [
{type: "2 shlf cart", itemCount: 4},
{type: "2 shlf cart", itemCount: 4},
{type: "5 shlf cart", itemCount: 10}
]

我需要的是:

var arr = [
{type: "2 shlf cart", itemCount: 8},
{type: "5 shlf cart", itemCount: 10}
]

我能够在需要计数但不需要组合键的不同场景中使用 reduce 和 map。

我搜索了与我的特定问题相匹配的答案,但找不到任何答案,如果这是重复的,我深表歉意。许多帖子的问题都很相似,但在大多数情况下,他们需要计算具有相同键、值对的对象,而不是实际添加具有相同键的值。

谢谢!

最佳答案

您可以使用 reduceObject.values 作为单行解决方案:

const arr = [
  {type: "2 shlf cart", itemCount: 4},
  {type: "2 shlf cart", itemCount: 4},
  {type: "5 shlf cart", itemCount: 10}
]

const out = arr.reduce((a, o) => (a[o.type] ? a[o.type].itemCount += o.itemCount : a[o.type] = o, a), {})
console.log(Object.values(out))

当然,如果这看起来太复杂,为了便于阅读,您总是可以写出来:

const arr = [
  {type: "2 shlf cart", itemCount: 4},
  {type: "2 shlf cart", itemCount: 4},
  {type: "5 shlf cart", itemCount: 10}
]

const out = arr.reduce((a, o) => {
  if (a[o.type]) {
    a[o.type].itemCount += o.itemCount  
  } else {
    a[o.type] = o
  }
  return a  
}, {})

console.log(Object.values(out))

关于javascript - 按键合并对象并添加值Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250956/

相关文章:

javascript - 如何使用 jquery 选择钻取按钮,以便我可以执行单击事件?

javascript - Express.js : How do I make a GET request with empty parameters?

C# 将 JSON 对象转换为数组

java - 数组给出了错误的输出?

java - 在 Java 的 String 类中重新创建 valueOf(double d)

c++如何让函数参数采用不同的对象(但属于同一类)并访问通过w/n函数调用传递的w/e对象的函数?

javascript - 语法错误 : Unexpected token

javascript - 如何在 JavaScript 中重写部分重载函数

php - Laravel:从json类型字符串访问键值

javascript - javascript 从数组中按键获取值