关于数组合并及对象去重的问题

时间:2022-07-23
本文章向大家介绍关于数组合并及对象去重的问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

写这篇文章是源于群内的朋友的问题,今天早上,像往常一样摸鱼,发现一个妹子发群里问了一个问题。

事情的经过大概是这样的

image.png

总的来说就是后端给他返回了一个对象,对象内有2个数组,2个数组中的内容不一样,但是有相同的id,他需要把们合并到一个数组中,并且保留不重复的属性

简单的模拟一下妹子的数据结构,外层对象就不写了
const OrderNoList=[
    {id:1,name:"aaa",},
    {id:2,name:"bbb"},
    {id:3,name:"ccc"},
]

const OrderProList=[
    {id:1,time:"201800"},
    {id:2,time:"201900",c:'333'},
    {id:4,time:"201011"},
]

妹子最终的需求则是如下的格式

result=[
    {id:1,name:"aaa",time:"201800"},
    {id:2,name:"bbb",time:"201900",c:'333'},
    {id:3,name:"ccc"},
    {id:4,time:"201011"},
]

好了开始处理问题,其中使用到了数组的一些方法concat,push,filter,和for...of方法遍历对象

处理代码如下
const OrderNoList=[
    {id:1,name:"aaa",},
    {id:2,name:"bbb"},
    {id:3,name:"ccc"},
]

const OrderProList=[
    {id:1,time:"201800"},
    {id:2,time:"201900",c:'333'},
    {id:4,time:"201011"},
]

const obj = OrderNoList.concat(OrderProList);
let newObj = []; 
for(item1 of obj){
    let tmp = true;
    let obj = {}
    for(item2 of newObj){
        if(item1.id == item2.id){
            obj = {
                ...item1,
                ...item2
            }
            newObj = newObj.filter(curr=>curr.id != item1.id)
            tmp = false;
        }
    }
    if(tmp){
        newObj.push(item1);
    }else{
        newObj.push(obj);
    }
}
console.log(newObj)
最终的输出结果也是我们想要的:
最后得到了一个赞

不过还是希望更好一点的解法,哈哈哈