如何在javaScript中使用特定键对对象进行分组

git*_*han 1 javascript arrays json object

我想对JavaScript对象进行分组,因为age.My JSON是

var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"jeni","age":21}]`
Run Code Online (Sandbox Code Playgroud)

我想成为这里的小组结果.

[23:{"name":"john","age":23},25:{"name":"mark","age":25},21:{"name":"jeni","age":21}]
Run Code Online (Sandbox Code Playgroud)

请帮我得到一个结果,我尝试用mapfilter,但没有得到结果.

Ori*_*ori 6

使用Array#reduce对对象进行分组.因为可以有多个年龄相同的人,所以将他们收集到age属性下的数组中:

var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"poll","age":23},{"name":"jeni","age":21}];

var result = jsonObj.reduce(function(r, o) {
  r[o.age] || (r[o.age] = []); // if the age key doesn't exist, set it to be an array
  
  r[o.age].push(o); // push the object into the array

  return r;
}, {});

console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者花哨的ES6单线版:

var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"poll","age":23},{"name":"jeni","age":21}];

var result = jsonObj.reduce((r, o) => ((r[o.age] || (r[o.age] = [])).push(o), r), {});

console.log(result);
Run Code Online (Sandbox Code Playgroud)