微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何对数组中的对象进行分组

我有一个对象数组,我想基于两个键对其对象进行分组

var arr = [ 
  {"name": "apple","id": "apple_0","c":'20'},{"name": "dog","id": "dog_1","c":'10'},{"name": "apple","c":'30'},];

而且我期待结果如此

var final = [ 
  {"name": "apple","c":'50'},"c":'20'}
];

场景是这样的 – 我想根据名称和ID对对象进行分组.如果在最终数组中找到name和id,则将其c的总和.

我试过这个:

var final = [];
for(var i = 0; i<arr.length; i++){
    var obj = {};
    obj = arr[i];
    for(var j = 0; j<final.length; j++){
        if((obj[name] !== final[j].name) && (obj[id] !== final[j].id)){
          final.push(obj)
        }else{
            //addition of key `c` in existing object in `final` array 
        }
    }
}

但是内部for循环不起作用,并且由于连续循环执行而挂起我的系统.

请让我知道如何解决它或任何其他逻辑,以获得最终结果.

解决方法

这是一个使用哈希表和#reduce()函数解决方案 – 请参阅下面的演示:

var arr = [{"name": "apple","c":'10'}];

var result = arr.reduce(function(hash){
  return function(p,c){
    if(hash[c.id])
      hash[c.id].c = +hash[c.id].c + +c.c
    else {
      hash[c.id] = hash[c.id] || c;
      p.push(hash[c.id]);
    }
    return p;
  }
}(Object.create(null)),[]);

console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐