首页 > 解决方案 > 循环遍历数组的对象属性并进行比较

问题描述

我有一个包含多个属性的对象数组,看起来像这样:

[
  {
    "title" = "Test",
    "prop1" = 4,
    "prop2" = 6
  },
  {
    "title" = "Test2",
    "prop1" = 5,
    "prop2" = 7
  },
  {
    "title" = "Test",
    "prop1" = 6,
    "prop2" = 14
  }
]

我想做的,是……</p>

所以最后我的输出会是……</p>

我尝试将值存储在变量中,比较这些变量,但这仅适用于两组数据,在我的情况下,也可以有五组、十组或 15 组具有相同标题的数据。

任何帮助表示赞赏,谢谢!:)

附加信息:我需要按名称访问属性,例如 data[1]['title']

标签: javascriptarraysloopsobject

解决方案


我们可以使用来累积数组的已处理条目,并且通过处理我的意思是通过使用和总结除以下属性之外的属性Array.prototype.reduce找到共享相同的元素:titleArray.prototype.findIndextitle

const data = [
  {
    "title" : "Test",
    "prop1" : 4,
    "prop2" : 6
  },
  {
    "title" : "Test2",
    "prop1" : 5,
    "prop2" : 7
  },
  {
    "title" : "Test",
    "prop1" : 6,
    "prop2" : 14
  }
];
const out = data.reduce((r, e) => {
  let idx = r.findIndex(o => e.title === o.title);
  if(idx >= 0 ){
    r[idx].prop1 += e.prop1;
    r[idx].prop2 += e.prop2;
  }else{
    r.push(e);
  }
  return r;
}, []);
console.log(out);


推荐阅读