JavaScript 如何使用两个数组的交集创建一个数组
在JavaScript中,两个数组的相交可以通过不同的方式来完成,比如使用Set、spread operator、filter()方法或includes()方法。每种方法都有自己的优点和缺点,考虑哪种方法对给定的任务最有效是很重要的。如果你想创建一个只包含两个数组中的元素的新数组,那么两个数组的交集是很有帮助的。
让我们举个例子–
arr1 = [ 2, 5, 7, 9, 11, 13, 15, 17 ]
arr2 = [ 1, 3, 5, 7, 11, 13, 16, 17 ]
intersecArr = [ 5, 6, 11, 13, 17 ]
上面我们定义了两个数组arr1和arr2,包括两个数组中存在的一些相同的值。两个数组的交集是antersecArr。
让我们讨论一下在JavaScript中使用两个数组的交集来创建一个数组的这些方法。
方法1:使用filter()和includes()方法
我们可以使用filter()和includes()方法来对两个数组进行相交。filter()方法接受一个函数作为其参数,并将其应用于数组中的每个元素。该函数应该返回一个布尔值,即true或false,表示该元素是否应该被包含在新数组中。在我们的例子中,我们希望两个输入数组中的元素都存在,所以我们将使用includes()方法来检查该元素是否存在于另一个数组中。
语法
Below is the syntax for using filter() and include() methods to create a new array using the intersection of two arrays −
let intersection = arr1.filter(x => arr2.includes(x));
filter()方法接受一个回调函数作为其参数。这个回调函数被应用于第一个数组(arr1)的每个元素,它使用includes()方法检查当前元素(x)是否存在于第二个数组(arr2)中。如果当前元素(x)存在于第二个数组(arr2)中,它就被包含在新数组(intersection)中。
如果当前元素(x)不在第二个数组(arr2)中,它就被排除在新数组(intersection)之外。最后的结果是一个新的数组(交集),只包含arr1和arr2中的元素。
例子
在下面的例子中,我们创建了两个数组,arr1和arr2,每个数组有五个元素,其中三个是相同的。然后使用filter和include方法来创建一个新的数组,包含两个数组中的共同元素。
<html>
<head>
<title>Creating an Array using Intersection of two Arrays using Filter() and Includes() methods</title>
</head>
<body>
<p id="arr1"></p>
<p id="arr2"></p>
<p id="result"></p>
<script>
let arr1 = [5, 6, 8, 11, 15];
let arr2 = [3, 5, 8, 11, 17];
document.getElementById("arr1").innerHTML = "Array 1: " + JSON.stringify(arr1);
document.getElementById("arr2").innerHTML = "Array 1: " + JSON.stringify(arr2);
const intersection = arr1.filter(x => arr2.includes(x));
document.getElementById("result").innerHTML = "Intersection of Array1 & Array 2: " + JSON.stringify(intersection);
</script>
</body>
</html>
上面的代码将创建一个新的数组,intersectionArray,它只包含两个输入数组中都有的元素。
方法2
在这种方法中,我们首先从arr1的元素中创建一个新的集合对象。它删除了任何重复的元素。然后使用spread运算符将集合对象转换为数组。这个数组没有重复的元素。现在我们使用filter()和include()方法来执行相交。接下来的过程与第一种方法相同。
let intersection = [...new Set(arr1)].filter(x => arr2.includes(x));
上面的语法创建了一个新的数组 “intersection”。它包含Arr1和Arr2中的元素,并从Arr1中删除了任何重复的元素。
例子
<html>
<head>
<title>Creating an Array using Intersection of two Arrays using Spread Operator and Filter() method</title>
</head>
<body>
<p id="arr1"></p>
<p id="arr2"></p>
<p id="result"></p>
<script>
let arr1 = [4, 8, 12, 16, 20, 28];
let arr2 = [8, 16, 20, 24, 28, 30];
document.getElementById("arr1").innerHTML = "Array 1: " + JSON.stringify(arr1);
document.getElementById("arr2").innerHTML = "Array 1: " + JSON.stringify(arr2);
let intersection = [...new Set(arr1)].filter(x => arr2.includes(x));
document.getElementById("result").innerHTML = "Intersection of Array1 & Array 2: " + JSON.stringify(intersection);
</script>
</body>
</html>
方法3:使用集合
在这种方法中,首先,我们使用新的Set()构造函数将数组转换成一个集合。然后使用for…of循环遍历第二个集合的元素。然后使用has()方法来检查元素是否在第一个集合中。如果该元素存在于第一个集合中,则使用push()方法将该元素添加到交叉数组中。
例子
<html>
<head>
<title>Creating an Array using Intersection of two Arrays using Set</title>
</head>
<body>
<p id="arr1"></p>
<p id="arr2"></p>
<p id="result"></p>
<script>
function doIntersection(arr1, arr2) {
const setFirst = new Set(arr1);
const setSecond = new Set(arr2);
let intersection = [];
for (let i of setSecond) {
if (setFirst.has(i)) {
intersection.push(i);
}
}
return intersection;
}
const arrFirst = [4, 6, 8, 10, 12];
const arrSecond = [4, 5, 8, 12, 15];
document.getElementById("arr1").innerHTML = "Array 1: " + JSON.stringify(arrFirst);
document.getElementById("arr2").innerHTML = "Array 1: " + JSON.stringify(arrSecond);
const interResult = doIntersection(arrFirst, arrSecond);
document.getElementById("result").innerHTML = "Intersection of Array1 & Array 2: " + JSON.stringify(interResult);
</script>
</body>
</html>
在本教程中,我们借助实例讨论了利用两个数组的交集创建数组的三种方法。在第一种方法中,我们使用了filter()和include()方法,而在第二种方法中,除了filter和include,我们还使用了spread operator和Set。在第三种方法中,我们创建了一个自定义函数来执行这一任务。