就像标题所示,我正在寻找一种方法来合并具有两个相同键值对的数组中的对象。例如,

var ingredients = [
 {name: 'egg',qty: 3,msr: large},
 {name: 'egg',qty: 3,msr: large},
 {name: 'egg',qty: 3,msr: tbsp},
 {name: 'bacon',qty: 1,msr: cup}
];


所需结果:

ingredients = [
 {name: 'egg',qty: 6,msr: large},
 {name: 'egg',qty: 3,msr: tbsp},
 {name: 'bacon',qty: 1,msr: cup}
];


任何建议表示赞赏!

最佳答案

您可以尝试将Array#reduceArray#find结合使用来构建新阵列。

我会通过namemsr检查您的对象是否存在。

看我的例子



var ingredients = [
 {name: 'egg',qty: 3,msr: 'large'},
 {name: 'egg',qty: 3,msr: 'large'},
 {name: 'egg',qty: 3,msr: 'tbsp'},
 {name: 'bacon',qty: 1,msr: 'cup'}
];

result = ingredients.reduce((acc, el) => {
  var existEl = acc.find(e => e.name == el.name && e.msr == el.msr);

  if (existEl) {
    existEl.qty = existEl.qty + el.qty;
  } else {
    acc.push(el);
  }

  return acc;
}, []);

console.log(result);

关于javascript - 合并具有两个相同键值对的数组中的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44084150/

10-12 03:29