首页 > 解决方案 > 如何通过两个相同的键按json数组分组

问题描述

如何根据两个 json 键进行分组,即 f 和 b 我的 json 数组

var json=[
    {   s:'s',  f:1,  b:1,  q:2   },
    {   s:'s',  f:1,  b:1,  q:3   },
    {   s:'s',  f:2,  b:1,  q:2   },
    {   s:'s',  f:2,  b:1,  q:2   },
    {   s:'s',  f:1,  b:2,  q:2   },
    {   s:'s',  f:1,  b:2,  q:2   },
    {   s:'s',  f:0,  b:1,  q:2   },
    {   s:'s',  f:0,  b:1,  q:2   },
    {   s:'s',  f:1,  b:0,  q:2    },
    {   s:'s',  f:1,  b:0, q:2    },
    {   s:'s',  f:0,  b:0,  q:2    },
    {   s:'s',  f:0,  b:0, q:2    },

];

预期产出

 var op=[
    {   s:'s',  f:1,  b:1,  q:5   },
    {   s:'s',  f:2,  b:1,  q:4   },
    {   s:'s',  f:1,  b:2,  q:4   },
    {   s:'s',  f:0,  b:1,  q:4   },
    {   s:'s',  f:1,  b:0,  q:4   },
    {   s:'s',  f:0,  b:0,  q:4   },

];

标签: javascriptjquery

解决方案


var json=[
    {   s:'s',  f:1,  b:1,  q:2   },
    {   s:'s',  f:1,  b:1,  q:3   },
    {   s:'s',  f:2,  b:1,  q:2   },
    {   s:'s',  f:2,  b:1,  q:2   },
    {   s:'s',  f:1,  b:2,  q:2   },
    {   s:'s',  f:1,  b:2,  q:2   },
    {   s:'s',  f:0,  b:1,  q:2   },
    {   s:'s',  f:0,  b:1,  q:2   },
    {   s:'s',  f:1,  b:0,  q:2   },
    {   s:'s',  f:1,  b:0,  q:2   },
    {   s:'s',  f:0,  b:0,  q:2   },
    {   s:'s',  f:0,  b:0,  q:2   },
];

var result = Object.values(json.reduce((list, cur) => {
    if(list[cur.f + ',' + cur.b])
        list[cur.f + ',' + cur.b].q += cur.q
    else
        list[cur.f + ',' + cur.b] = Object.assign({}, cur)
    return list
}, {}))
console.log(result)


推荐阅读