想统计出数组里相同名称的数量之和

这组数据中 怎么把name的值相同的number相加?
原数据

var res = [{
    "name": "apple",
    "number": "15",
    "date": "2017/1/2",
}, {
    "name": "orange",
    "number": "25",
    "date": "2017/1/4",
}, {
    "name": "apple",
    "number": "4",
    "date": "2017/1/7",
}, {
    "name": "banana",
    "number": "1",
    "date": "2017/1/1",
}];

希望统计的结果

var res = [{
    "name": "apple",
    "number": "19",
}, {
    "name": "orange",
    "number": "25",
}, {
    "name": "banana",
    "number": "1",
}];
阅读 4.2k
3 个回答

注意number 是个字符串

let tmp = {}
res.forEach(v => tmp[v.name] = (tmp[v.name] || 0) + Number(v.number))
res = Object.keys(tmp).map(name => ({ name, number: tmp[name]}))
console.log(res)
    function parseArr(arr){
        var nameArr=[];
        var result=[]
        arr.forEach(function(item){
            var i
            if((i=nameArr.indexOf(item.name))>-1){
                console.log(result,i)
                result[i].number=Number(result[i].number)+Number(item.number);
            }else{
                nameArr.push(item.name);
                result.push({
                    name:item.name,
                    number:item.number
                })
            }
        })
        return result
    }

已自测通过,可放心食用

var tmp = {};
for(let i=0; i<res.length; i++){

if(!tmp[res[i].name])
    tmp[res[i]].number = 0;
tmp[res[i].name].number += res[i].number;

}

主要代码应该如上,循环过后,tmp中就是你要的结果,但形式不对,你自己再把结果组装一下就OK。
随手写的,没测试,不保证完全正确,思路应该表达清晰了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题