现在有一个数组类似于
var a=[{name:"May",age:12,id:1},{name:"Jone",age:13,id:5},{name:"May",age:15,id:6}];
要把所有name相同的对象重组,大概成为这样的数组
var b = [{
name: "May",
list: [{
name: "May",
age: 12,
id: 1
}, {
name: "May": age: 15,
id: 6
}]
}, {
name: "Jone",
list: [{
name: "Jone",
age: 13,
id: 5
}]
}]
自己手写了一个,写的比较粗糙,但是可以看一下~有哪位大神可以提供更优化的写法?
var a=[{name:"May",age:12,id:1},{name:"Jone",age:13,id:5},{name:"May",age:15,id:6}];
function createNewArray ( arr ){
var nameTempArr = [];
var newArr = [];
for (var i = 0; i < arr.length; i++ ){
if (nameTempArr.indexOf(arr[i].name) == -1 ){
nameTempArr.push(arr[i].name);
var obj = {};
obj.name = arr[i].name;
obj.list = [];
obj.list.push(arr[i]);
newArr.push(obj);
}else{
//遍历newArr中的数 添加进去
for( var j = 0; j < newArr.length; j++ ){
if( arr[i].name == newArr[j].name ){
newArr[j].list.push(arr[i].name);
}
}
}
}
return newArr;
}