📅  最后修改于: 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 实现比较两个数组并删除不匹配的对象的功能。我们使用 filter
、some
和 splice
等方法实现了这个功能,希望能对你有所帮助。