js数组分组
要求:把数组里相同key并且相同name的元素分组,
源数据:
let data =[ {key:'xxx',name:'yyy',age:1,money:123}, {key:'sss',name:'yyy',age:2,money:123}, {key:'sss',name:'yyy',age:3,money:123}, {key:'sss',name:'zzz',age:4,money:123}, {key:'xxx',name:'yyy',age:5,money:123}, {key:'xxx',name:'yyy',age:6,money:123}, {key:'zzz',name:'yyy',age:7,money:123}, {key:'xxx',name:'zzz',age:8,money:123}, {key:'zzz',name:'xxx',age:9,money:123}, ]
//写法1
let json = {}
data.forEach((ele)=>{
json[ele.key+ele.name] = json[ele.key+ele.name] || [ ]
json[ele.key+ele.name].push(ele)
})
//写法2:
let json={}
data.forEach((ele)=>{
if(!json[ele.key+ele.name]){
json[ele.key+ele.name]=[ ];
json[ele.key+ele.name].push(ele)
}else{
json[ele.key+ele.name].push(ele)
}
})
//写法3:
let json={}
for(let i = 0;i<data.length;i++){
let key = data[i].key
let name = data[i].name
if(typeof json[key+name]=='undefined'){
json[key+name]=[];
json[key+name].push(data[i])
}else{
json[key+name].push(data[i])
}
}
//写法4:
let tempList = [];
let resultList = [];
data.map((item) => {
if (!tempList.some(items=>{return (items.key === item.key && items.name ===item.name)})) {
tempList.push({key:item.key,name:item.name});
resultList.push({
key:item.key,
name:item.name,
list:[]
})
}
});
resultList.map((item) => {
data.map((items) => {
if (item.name === items.name && item.key === items.key) {
item.list.push(items);
}
});
});