javascript - 合并数组中具有两个相同键值对的对象

标签 javascript

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

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/

相关文章:

javascript - 为什么可以在 javascript 中减去 Date 对象?是否有任何形式的运算符重载?

JavaScript 小部件必须等待 AngularJS 变量值

javascript - 为什么动态创建的图像的自然宽度为 0

javascript - 带有音频标签和js的歌曲的多重再现

javascript - JS一键切换(不是两次点击)-切换元素的默认值

javascript - .each() 函数,每次迭代之间有间隔

javascript - Jquery - 隐藏单选按钮 - 但使图像可点击以显示更大的图像

javascript - 通过 XMLHttpRequest 从 JavaScript 向 PHP 发送数据

javascript - 如何获取从 Laravel 4 中的 Angular 传递的 FormData 的值?

javascript - 具有多种表单的表单插件 |提交返回最后一个表格