代码之家  ›  专栏  ›  技术社区  ›  Ilario

有效地比较两个大型对象数组并找出差异

  •  4
  • Ilario  · 技术社区  · 6 年前

    我有两个大的物体阵列,比如:

    const array1 = [
        {
            userId: 83232932,
            name: 'Tom',
            profile_pic: 'http://..',
            age: 24,
            gender: 'F'
        },
        {
            userId: 2413535,
            name: 'Sam',
            profile_pic: 'http://..',
            age: 31,
            gender: 'M'
        }
    ]
    

    另一个几乎相等的数组。

    现在我在做:

    const missing = array1.filter(function(item1) {
        return !array2.some(function(item2) {
            return item1.userId === item2.userId;
        });
    });
    

    这是可行的,但它会阻塞我的应用程序的UI几秒钟。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Nina Scholz    6 年前

    Set 并检查是否过滤第一个数组。

    const
        ids = new Set(array2.map(({ id }) => id)),
        missing = array1.filter(({ id }) => !ids.has(id));