现在有一个数组类似于
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
}],
aPerson = a.reduce(function(p, n) {
p.some(function(o) {
return o.name === n.name && o.list.push(n);
}) || p.push({
name : n.name,
list : [n]
});
return p;
}, []);
alert(JSON.stringify(aPerson));
const users = [{ name : "May", age : 12, id : 1 }, { name : "Jone", age :13, id : 5 }, { name : "May", age : 15, id : 6 }];
function distinctUsers(users) {
return users.reduce((users, user) => {
if (!users.filter(({ name }) => user.name === name)[0]) {
users.push(user);
}
return users;
}, []);
}
distinctUsers(users);
// => [{"name":"May","age":12,"id":1},{"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 }];
let obj = {};
let result = [];
a.forEach( (element, index) => {
if (!obj[element.name]) {
obj[element.name] = [];
}
obj[element.name].push(element);
});
for (let key in obj) {
result.push({
name: key,
list: obj[key]
});
}
console.log(result);
花了20分钟才写出来,感觉自己好菜。
var a=[{name:"May",age:12,id:1},{name:"Jone",age:13,id:5},{name:"May",age:15,id:6}];
var b = [];
for(let index_a in a){
//console.log(a[index_a]);
if(index_a == 0){
b.push({
name:a[index_a].name,
list:[a[index_a]]
});
}
for(let index_b in b){
if(b[index_b].name == a[index_a].name && index_a>0){
b[index_b].list.push(a[index_a]);
}else{
var boo = false;
for(let index_c in b){
if(b[index_c].name==a[index_a].name){
boo = true;
}
}
if(!boo){
b.push({
name:a[index_a].name,
list:[]
});
}
}
}
};
console.log(b);