美文网首页
关于数组合并及对象去重的问题

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

作者: 422ccfa02512 | 来源:发表于2020-01-16 15:16 被阅读0次

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

    事情的经过大概是这样的
    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"},
    ]
    

    好了开始处理问题,其中使用到了数组的一些方法concatpushfilter,和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)
    
    最终的输出结果也是我们想要的:
    最后得到了一个赞

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

    相关文章

      网友评论

          本文标题:关于数组合并及对象去重的问题

          本文链接:https://www.haomeiwen.com/subject/pvefzctx.html