javascript - 想统计出数组里相同名称的数量之和
大家讲道理
大家讲道理 2017-04-11 12:21:34
[JavaScript讨论组]

这组数据中 怎么把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",
}];
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
黄舟
    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
    }

已自测通过,可放心食用

PHP中文网

注意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)
PHPz

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。
随手写的,没测试,不保证完全正确,思路应该表达清晰了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号