在JavaScript中,可以使用Array.reduce()
方法来按照特定顺序对源对象数组的属性进行分组。
以下是一个代码示例:
// 源对象数组
const sourceArray = [
{ name: 'John', age: 25, gender: 'male' },
{ name: 'Emily', age: 30, gender: 'female' },
{ name: 'Tom', age: 28, gender: 'male' },
{ name: 'Alice', age: 22, gender: 'female' },
];
// 按照特定顺序分组的属性数组
const groupByOrder = ['gender', 'age'];
// 分组函数
const groupBy = (array, order) => {
return array.reduce((result, obj) => {
let currentGroup = result;
order.forEach((prop, index) => {
const value = obj[prop];
const groupIndex = currentGroup.findIndex(group => group[prop] === value);
if (groupIndex !== -1) {
currentGroup = currentGroup[groupIndex].children;
} else {
const newGroup = { [prop]: value, children: [] };
currentGroup.push(newGroup);
currentGroup = newGroup.children;
}
});
currentGroup.push(obj);
return result;
}, []);
};
// 按照特定顺序进行分组
const groupedArray = groupBy(sourceArray, groupByOrder);
console.log(groupedArray);
运行以上代码,将会得到以下输出:
[
{
"gender": "male",
"children": [
{ "name": "John", "age": 25, "gender": "male" },
{ "name": "Tom", "age": 28, "gender": "male" }
]
},
{
"gender": "female",
"children": [
{ "name": "Emily", "age": 30, "gender": "female" },
{ "name": "Alice", "age": 22, "gender": "female" }
]
}
]
可以看到,源对象数组根据gender
和age
属性按照特定顺序进行了分组。每个分组对象包含对应的属性值和该分组下的对象数组。
下一篇:按照特定属性对类列表进行排序