繁体   English   中英

如何在对象数组中查找元素的所有出现并在 Javascript 中求和它们的相应值

[英]How to find all occurences of an element inside an array of objects and sum their corresponding values in Javascript

我有一个对象数组,如下所示:

[
  { code: "a", value: 20 },
  { code: "b", value: 20 },
  { code: "c", value: 20 },
  { code: "a", value: 20 },
  { code: "b", value: 20 },
]

我想通过为所有唯一代码添加值来减少它

[
  { code: "a", value: 40 },
  { code: "b", value: 40 },
  { code: "c", value: 20 },
]

您可以使用函数Array.prototype.reducecode对对象进行分组,使用函数Object.values来提取分组的对象。

 let arr = [{code : 'a', value :20},{code : 'b', value :20},{code : 'c', value :20},{code : 'a',value :20},{code : 'b', value :20}], result = Object.values(arr.reduce((a, {code, value}) => { (a[code] || (a[code] = {code, value: 0})).value += value; return a; }, Object.create(null))); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

您可以使用reduce来存储代码值查找对象,并使用Object.entries()遍历该对象,然后进行操作以获取最终值

 const arr = [ { code: "a", value: 20 }, { code: "b", value: 20 }, { code: "c", value: 20 }, { code: "a", value: 20 }, { code: "b", value: 20 }, ] const codeValueMapping = arr.reduce((acc, el) => { if (acc[el.code]) { acc[el.code] += el.value } else { acc[el.code] = el.value } return acc }, {}) const res = Object.entries(codeValueMapping).map(([code, value]) => ({ code, value, })) console.log(res)

一种解决方案是在 ECMA 6 中使用 set

[...new Set(YOUR_ARRAY.map(JSON.stringify))].map(JSON.parse)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM