javascript - js 数值统计,数值比较

查看:99
本文介绍了javascript - js 数值统计,数值比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

目的是要找出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
            }
        ]
    }
]

解决方案

修正:

鉴于你不喜欢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

这篇关于javascript - js 数值统计,数值比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆