js 对象数组分组(两种方法):
数据源:
var arr=[
{id:1,name:"张三",age:18},
{id:2,name:"李四",age:18},
{id:3,name:"赵五",age:20},
{id:4,name:"小王",age:19},
{id:5,name:"小刘",age:20},
];
方法一:
function arrayGroup(arr){
var str= {};
var newArr= [];
for (var i = 0; i < arr.length; i++) {
var list= arr[i];
if (!str[list.age]) {
newArr.push({
age: list.age,
children: [list]
})
str[list.age] = list;
} else {
for (var j = 0; j < newArr.length; j++) {
var newlist = newArr[j];
if (newlist.age=== list.age) {
newlist.children.push(list);
break;
}
}
}
}
return newArr;
}
console.log(arrayGroup(arr));
//[
// {
// age:18,
// children:[
// {id:1,name:"张三",age:18},
// {id:2,name:"李四",age:18},
// ]
// },
// {
// age:19,
// children:[
// {id:4,name:"小王",age:19},
// ]
// },
// {
// age:20,
// children:[
// {id:3,name:"赵五",age:20},
// {id:5,name:"小刘",age:20},
// ]
// },
//]
方法二:
function groupBy(arr, property) {
return arr.reduce(function (cur, obj) {
var key = obj[property];
if (!cur[key]) {
cur[key] = [];
}
cur[key].push(obj);
return cur;
}, {});
}
console.log(groupBy(arr,'age'));
结果: