📌  相关文章
📜  从两个数组 javascript 中删除匹配元素(1)

📅  最后修改于: 2023-12-03 15:36:15.921000             🧑  作者: Mango

从两个数组 JavaScript 中删除匹配元素

在 JavaScript 中,有时候需要从两个数组中删除匹配的元素。这可以通过不同的方法完成,包括使用循环遍历每个数组和使用现成的数组函数等等。

以下是一些可能的解决方案:

使用 filter() 函数

可以使用 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 ]

注意,我们在删除元素后将 ij 减少了 1,以便它们可以正确地指向下一个元素。

使用 Set 和 filter() 函数

也可以使用 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() 函数。

以上是一些从两个数组中删除匹配元素的解决方案。这些方法都可以根据不同的需求进行修改,并且可以很好地处理不同类型的数据。