js两个数组比较去重

请问怎么list2怎么根据list1里的id过滤相同的这条数据,有没有简便的方法

list1:[
    {
        id:0
        name:'xiaomin'
    },
    {
        id:1
        name:'xiaohong'
    },
]

list2:[
    {
        id:0
        name:'xiaomin'
    },
    {
        id:1
        name:'xiaohong'
    },
            {
        id:3
        name:'xiaomin'
    },
    {
        id:4
        name:'xiaohong'
    },
]
阅读 14k
3 个回答

如果追求性能,可以采用空间换时间的做法,在JS中最常见的处理方式就是构建Object,因为Object查找key的时间复杂度是O(1),而数组是O(n)

const list1 = [
    {id: 0, name: 'xiaomin'},
    {id: 1, name: 'xiaohong'},
];
const list2 = [
    {id: 0, name: 'xiaomin'},
    {id: 1, name: 'xiaohong'},
    {id: 3, name: 'xiaomin'},
    {id: 4, name: 'xiaohong'},
];
// 首先构造Object
const idSet = list1.reduce((acc, v) => {
    acc[v.id] = true;
    return acc;
}, {});
// 遍历list2,去掉在idSet中存在的id
const result = list2.filter(v => !idSet[v.id]);
var result = list2.filter(function(item1) {
     return list1.every(function(item2) {
       return item2.id !== item1.id
     })
 })
 console.log(result);

可以这样看看

楼主,可以参考下

const newData = list2.filter((l2) => list1.findIndex((l1) => l2.id === l1.id) !== -1);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题