[ Object ] 去重 合併具有相同屬性的數組

去重合並相同屬性的數組

思路:
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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章