📜  比较两个数组并删除不匹配的对象 (1)

📅  最后修改于: 2023-12-03 14:55:56.822000             🧑  作者: Mango

比较两个数组并删除不匹配的对象

在开发过程中,经常需要比较两个数组并删除不匹配的对象。这个操作可以用于筛选在两个数组中都存在的对象,或者删除两个数组中差异很大的对象。本文将介绍如何用 JavaScript 实现这个操作。

实现方式

首先,我们需要比较两个数组。可以使用以下代码比较两个数组:

function compareArrays(array1, array2) {
  return array1.filter(obj1 => {
    return array2.some(obj2 => {
      return obj1.id === obj2.id;
    });
  });
}

这个函数使用 filter 方法遍历第一个数组中的每一个元素,并使用 some 方法遍历第二个数组,查找相同 id 的元素。如果找到了相同 id 的元素,则保留在第一个数组中,否则删除。

接下来,我们需要删除不匹配的对象。可以使用以下代码删除不匹配的对象:

function removeNonMatchingObjects(array1, array2) {
  array1.filter(obj1 => {
    return array2.some(obj2 => {
      return obj1.id === obj2.id;
    });
  }).forEach(obj1 => {
    const index = array1.findIndex(obj => obj.id === obj1.id);
    array1.splice(index, 1);
  });

  array2.filter(obj2 => {
    return array1.some(obj1 => {
      return obj1.id === obj2.id;
    });
  }).forEach(obj2 => {
    const index = array2.findIndex(obj => obj.id === obj2.id);
    array2.splice(index, 1);
  });
}

这个函数使用 filter 方法遍历每一个数组,并使用我们刚刚实现的 compareArrays 函数筛选出匹配的对象。然后,使用 forEach 方法遍历匹配的对象,并使用 splice 方法从原数组中删除这些对象。

使用示例

下面是一个使用示例:

const array1 = [
  { id: 1, name: 'apple' },
  { id: 2, name: 'orange' },
  { id: 3, name: 'banana' },
];
const array2 = [
  { id: 2, name: 'orange' },
  { id: 3, name: 'banana' },
  { id: 4, name: 'pear' },
];

removeNonMatchingObjects(array1, array2);

console.log(array1); // [{ id: 2, name: 'orange' }, { id: 3, name: 'banana' }]
console.log(array2); // [{ id: 2, name: 'orange' }, { id: 3, name: 'banana' }, { id: 4, name: 'pear' }]

在这个示例中,我们比较了两个数组,并删除了不匹配的对象。最终得到的 array1 数组中只保留了 { id: 2, name: 'orange' }{ id: 3, name: 'banana' } 两个对象,array2 数组中则包含了所有匹配的对象和新增的 { id: 4, name: 'pear' } 对象。

总结

本文介绍了如何使用 JavaScript 实现比较两个数组并删除不匹配的对象的功能。我们使用 filtersomesplice 等方法实现了这个功能,希望能对你有所帮助。