[英]JavaScript: group array of objects by property in an object
if I have a js array like below, is there a simple way to re-group the array values by age?如果我有一个像下面这样的 js 数组,有没有一种简单的方法可以按年龄重新分组数组值? I tried to reduce it to an array but it did not help.
我试图将它减少为一个数组,但它没有帮助。 it's re-grouped with age or name's
它按年龄或姓名重新分组
let employees = [
{
firstName:"Zion",
lastName: "Rosy",
age: 25,
joinedDate:"January 24, 2020",
},
{
firstName: "Ana",
lastName: "Rosy",
age: 25,
joinedDate: "January 15, 2019",
},
{
firstName: "Zion",
lastName:"Albert",
age: 30,
joinedDate:"February 15, 2011",
},
];
To re-group by age like this:像这样按年龄重新分组:
let organizedByAge =
{
25: [
{
firstName:"Zion",
lastName: "Rosy",
age: 25,
joinedDate:"January 24, 2020",
},
{
firstName: "Ana",
lastName: "Rosy",
age: 25,
joinedDate: "January 15, 2019",
},
],
30: [
{
firstName:"Zion",
lastName:"Albert",
age: 30,
joinedDate:"February 15, 2011",
},
],
};
is there a simple way to re-group the array values by age?
有没有一种简单的方法可以按年龄重新分组数组值?
When rewriting arrays and objects, the most straightforward and readable approach is often to use a simple for
loop:在重写 arrays 和对象时,最直接和可读的方法通常是使用简单
for
循环:
for (let i = 0; i < employees.length; i++) {
const age = employees[i]['age'];
if (organizedByAge.hasOwnProperty(age)) {
organizedByAge[age].push(employees[i]);
}
else {
organizedByAge[age] = [];
organizedByAge[age][0] = employees[i];
}
}
Working Example:工作示例:
let employees = [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020", }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019", }, { firstName: "Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011", }, ]; let organizedByAge = {}; for (let i = 0; i < employees.length; i++) { const age = employees[i]['age']; if (organizedByAge.hasOwnProperty(age)) { organizedByAge[age].push(employees[i]); } else { organizedByAge[age] = []; organizedByAge[age][0] = employees[i]; } } console.log(organizedByAge);
const groupByKey = (_data, _key) => {
return _data.reduce((result, next) => {
const key = next[_key];
result[key] = result[key]?.length ? [...result[key], next] : [next];
return result;
}, {});
}
console.warn(groupByKey(employees, 'age'));
Using Array#reduce
:使用
Array#reduce
:
const employees = [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020" }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019" }, { firstName: "Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011" } ]; const organizedByAge = employees.reduce((map, e) => ({...map, [e.age]: [...(map[e.age]?? []), e] }), {}); console.log(organizedByAge);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.