首页 > 解决方案 > 使用 JSON 数组进行多级分组

问题描述

下面是我的 Json 数组:

var person = [ { name: 'Jim', color: 'blue', Office:'Microsoft', age: 22, }, { name: 'Sam', color: 'blue', Office:'Microsoft', age: 33, }, { name: 'Eddie', color: 'green', Office:'Dell', age: 77, }, ]

通过使用以下功能,我能够按功能获得单个组

var  GroupByResults= person.reduce(function (r, a) {
        r[a.color] = r[a.color] || [];
        r[a.color].push(a);
        return r;
    }, Object.create(null));

我得到了以下输出

{ "blue": [ { "name": "Jim", "color": "blue", Office:'Microsoft', "age": 22 }, { "name": "Sam", "color": "blue", Office:'Microsoft', "age": 33 } ], "green": [ { "name": "Eddie", "color": "green", Office:'Dell', "age": 77 } ] }

我怎样才能实现多级分组?我想要另一个与 Office 的组,所以第一个与颜色组和下一个与办公室的组可以帮助我吗...

标签: javascriptjqueryarraysjson

解决方案


您可以尝试为组构建创建一个函数,例如:

const data = [{ name: 'Jim', color: 'blue', Office:'Microsoft', age: 22, }, { name: 'Sam', color: 'blue', Office:'Microsoft', age: 33, }, { name: 'Eddie', color: 'green', Office:'Dell', age: 77, }]

function generateGroup(data, key) {
  return data.reduce((r, a) => {
    r[a[key]] = r[a[key]] || [];
    r[a[key]].push(a);
    return r;
  }, {});
}

const KEYS = ['name', 'color', 'Office', 'age'];

const result = [];
for (const k of KEYS) {
  result.push(generateGroup(data, k));
}

console.log(result);


推荐阅读