📅  最后修改于: 2023-12-03 15:36:15.921000             🧑  作者: Mango
在 JavaScript 中,有时候需要从两个数组中删除匹配的元素。这可以通过不同的方法完成,包括使用循环遍历每个数组和使用现成的数组函数等等。
以下是一些可能的解决方案:
可以使用 filter() 函数来删除匹配的元素。该函数将返回一个新数组,其中不包含满足条件的元素。
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];
const newArr1 = arr1.filter(val => !arr2.includes(val));
const newArr2 = arr2.filter(val => !arr1.includes(val));
console.log(newArr1); // [ 1, 2 ]
console.log(newArr2); // [ 6, 7 ]
上面的代码利用了一个箭头函数,它接受一个值作为参数,并返回一个布尔值。在这种情况下,当值不在另一个数组中时,返回 true
。
还可以使用循环遍历每个数组,找到匹配的元素并删除它们。下面是一个例子:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[i] === arr2[j]) {
arr1.splice(i, 1);
arr2.splice(j, 1);
i--;
break;
}
}
}
console.log(arr1); // [ 1, 2 ]
console.log(arr2); // [ 6, 7 ]
注意,我们在删除元素后将 i
和 j
减少了 1,以便它们可以正确地指向下一个元素。
也可以使用 Set 数据结构,先创建两个 Set,并从中类型转换成数组,再使用 filter() 函数。
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];
const set1 = new Set(arr1);
const set2 = new Set(arr2);
const newArr1 = [...set1].filter(val => !set2.has(val));
const newArr2 = [...set2].filter(val => !set1.has(val));
console.log(newArr1); // [ 1, 2 ]
console.log(newArr2); // [ 6, 7 ]
new Set()
创建了两个包含数组中所有唯一元素的 Set。然后,我们从 Set 中创建了数组,并使用了与前面相同的 filter() 函数。
以上是一些从两个数组中删除匹配元素的解决方案。这些方法都可以根据不同的需求进行修改,并且可以很好地处理不同类型的数据。