首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并数组中具有两个相同键值对的对象

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

Stack Overflow用户
提问于 2017-05-20 17:24:52
回答 3查看 333关注 0票数 1

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

代码语言: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}
];

期望的结果:

代码语言:javascript
复制
ingredients = [
 {name: 'egg',qty: 6,msr: large},
 {name: 'egg',qty: 3,msr: tbsp},
 {name: 'bacon',qty: 1,msr: cup}
];

任何建议都很感谢!

EN

回答 3

Stack Overflow用户

发布于 2017-05-20 17:33:05

您可以尝试结合使用Array#reduceArray#find来构建新的数组。

我会用namemsr检查你的对象是否存在。

请看我的例子

代码语言: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'}
];

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);

票数 1
EN

Stack Overflow用户

发布于 2017-05-20 17:37:47

您可以这样做:

  1. 创建一个带有键的对象,您可以使用这些键添加数量array#forEach
  2. 通过迭代对象var配料={名称:‘蛋’,数量: 3,msr:‘大’},{名称:‘蛋’,数量: 3,msr:‘大’},{名称:‘蛋’,数量: 3,msr:'tbsp'},{名称:‘培根’,数量: 1,msr:‘杯’};var obj = {};创建ans数组;ingredients.forEach(function (v,i) { var key = v.name +‘'+v.msr;if(! objkey ) { objkey = +v.qty;} else {objkey += +v.qty;} });//console.log( obj);var ans = [];for(obj中的var key ){var s= key.split(’');ans.push({name:s,qty:objkey,msr:s1});} console.log(ans);
票数 0
EN

Stack Overflow用户

发布于 2017-05-20 18:11:48

您可以使用哈希表作为闭包,并将所需的值连接为键。然后,如果需要,构建一个新对象,并在以后调整数量。

代码语言: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 = ingredients.reduce(function (hash) {
    return function (r, o) {
        var key = ['name', 'msr'].map(function (k) { return o[k]; }).join('|');
        if (!hash[key]) {
            hash[key] = { name: o.name, msr: o.msr, qty: 0 };
            r.push(hash[key]);
        }
        hash[key].qty += o.qty;
        return r;
     };
}(Object.create(null)), []);

console.log(ingredients);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44084150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档