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

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

作者: 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