javascript - js 数值统计,数值比较
黄舟
黄舟 2017-04-11 10:55:38
[JavaScript讨论组]

目的是要找出results里code相同的数值之和最大的一个,答案是574417bc79df540065d92df7,9+9=18 总和最大。
以下obj是这里计算的一个中间产物,如果有其它方法可能没有这个产物,但数值比较用户要有依据,所以有中间产物留着就更好了。
var obj = [{"code":"57442329a3413100625f194f","poll": 7},{"code":"574417bc79df540065d92df7","poll": 18},{"code":"574a841d1532bc006068c6c9","poll": 5},{"code":"574a97fe2b51e90056e423c0","poll": 12},{"code": "574424e5df0eea0063adefc6","poll": 1},{"code": "5744242bc4c971005d5ff04e","poll": 2}];

var results = [
    {
        "uid": "5744242bc4c971005d5ff04e",
        "data": [
            {
                "code": "57442329a3413100625f194f",
                "poll": 7
            },
            {
                "code": "5744242bc4c971005d5ff04e",
                "poll": 2
            }
        ]
    },
    {
        "uid": "57442329a3413100625f194f",
        "data": [
            {
                "code": "574417bc79df540065d92df7",
                "poll": 9
            }
        ]
    },
    {
        "uid": "574417bc79df540065d92df7",
        "data": [
            {
                "code": "574417bc79df540065d92df7",
                "poll": 9
            }
        ]
    },
    {
        "uid": "574424e5df0eea0063adefc6",
        "data": [
            {
                "code": "574a841d1532bc006068c6c9",
                "poll": 3
            },
            {
                "code": "574a97fe2b51e90056e423c0",
                "poll": 6
            }
        ]
    },
    {
        "uid": "574a841d1532bc006068c6c9",
        "data": [
            {
                "code": "574424e5df0eea0063adefc6",
                "poll": 1
            },
            {
                "code": "574a841d1532bc006068c6c9",
                "poll": 2
            },
            {
                "code": "574a97fe2b51e90056e423c0",
                "poll": 5
            }
        ]
    },
    {
        "uid": "574a97fe2b51e90056e423c0",
        "data": [
            {
                "code": "574a97fe2b51e90056e423c0",
                "poll": 1
            }
        ]
    }
]
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
PHPz

修正:

鉴于你不喜欢ES6的缘故,那我再稍微改改

var res = results
    .reduce(function(p, item) {
        p.push.apply(p, item.data);
        return p;
    }, [])
    .reduce(function(p, item) {
        if (!p[item.code]) {
            p[item.code] = item.poll;
        } else {
            p[item.code] += item.poll;
        }
        return p;
    }, {});

var max = Object
    .keys(res)
    .reduce(function(p, item) {
        if (!p) {
            return item;
        }
        if (res[p] < res[item]) {
            return item;
        }
        return p;
    }, '');

console.log(max); //你想要的结果: 574417bc79df540065d92df7
迷茫
var res1=_.countBy(_.flattenDeep(_.map(results,'data')),'code');

console.log(res1);


用lodash可能轻松解决

输出结果
    { '57442329a3413100625f194f': 1,
  '5744242bc4c971005d5ff04e': 1,
  '574417bc79df540065d92df7': 2,
  '574a841d1532bc006068c6c9': 2,
  '574a97fe2b51e90056e423c0': 3,
  '574424e5df0eea0063adefc6': 1 }
  
  
  又看了一个你的原题,你要的是值的总数,还是总合?
  如果要计算总合,哪就改一下
      
      var res1=_.flattenDeep(_.map(results,'data'));
        console.log(res1);
        
        var arr=[];
        var res4=_.forEach(res1,function(v,k){
            if(!arr[v.code]){
                arr[v.code]=v.poll;
            }else{
                arr[v.code] += v.poll;
            }
        })    
        console.log(arr);
              
  
怪我咯
var obj = {};
results.forEach(function(item) {
    item.data.forEach(function(innerItem) {
        obj[innerItem.code] ? obj[innerItem.code] += innerItem.poll : (obj[innerItem.code] = innerItem.poll);
    })
})

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

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