【问题标题】:Multi level grouping with JSON array使用 JSON 数组进行多级分组
【发布时间】:2021-03-07 19:34:30
【问题描述】:

下面是我的 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 组,所以第一个组与颜色和下一组与办公室可以任何人帮助我...

【问题讨论】:

  • 您能否在开篇文章中添加所需输出的示例?
  • 你试过用 a.Office 替换 a.color 吗?

标签: javascript jquery arrays json


【解决方案1】:

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

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);

【讨论】:

    【解决方案2】:

    您可以为对象的每个键使用forEach,这样您就可以同时使用所有键进行分组。

    你会得到类似的东西:

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

    注意:关闭JSON.stringify函数,它只是为了以可读的方式显示结果。

    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) {
      const keys = Object.keys(a);
    
      keys.forEach(k => {
        r[k] = r[k] || [];
        r[k].push(a);
      })
    
    
      return r;
    }, Object.create(null));
    
    console.log(JSON.stringify(GroupByResults, null, 4));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多