去重合並相同屬性的數組
思路:
1.定義目標數組 var result = [];
2.定義對象放置目標對象屬性
例如:var obj = { name : true,age:18 }
var orders = [
{
name : 'wayne',
order:'1'
},
{
name:'wayne',
order:'2'
},
{
name:'judy',
order:'3'
},
{
name:'judy',
order:'5'
},
{
name:'judy',
order:'6'
},
{
name :'aa',
order:'66'
}
]
//合併成想要的結果
var orderResult = [
{
name:'wayne',
order:['1','2']
},
{
name:'judy',
order:['5','5']
},
{
name :'aa',
order:['66']
}
]
方法一:
var resultList = []; //目標對象
var menuItem = {} ; //{ 'judy' :true}
orders.forEach((el,i) =>{
if(!menuItem[el.name]){ //如果沒有相同的屬性
resultList.push({ //想要的格式放進去
name : el.name,
order:[el.order]
});
menuItem[el.name] = true;
}else{
resultList.forEach((el) =>{
if(el.name === orders[i].name){ //目標數組對象和原對象名字屬性一樣,那麼把order合併
el.order.push(orders[i].order)
// el.order =[...el.order,...orders[i].order]
}
})
}
})
console.log(resultList)
方法二:
let result = [];
let tempAry = []; // 存儲格式爲 ['name1','name2','name3'];
for (let i = 0; i < list.length; i++) {
// 判斷 list中的name是否在 tempAry 中,如果不在,往result和tempAry存儲數據
if (!tempAry.includes(list[i].name)) {
tempAry.push(list[i].name);
result.push({
name: list[i].name,
order: [list[i].order]
})
} else {
// 判斷result中的name是否和list中的name相等,如果相等,把order數據存儲進來
for (let j = 0; j < result.length; j++) {
if (list[i].name == result[j].name) {
result[j].order.push(list[i].order);
}
}
}
}
console.log(result)