如何使用JavaScript创建两个数组的交集数组

如何使用JavaScript创建两个数组的交集数组

在JavaScript中,可以使用不同的方法来计算两个数组的交集,例如使用Set、扩展运算符、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()方法来检查元素是否存在于另一个数组中。

语法

以下是使用filter()和include()方法创建一个使用两个数组交集的新数组的语法 −

let intersection = arr1.filter(x => arr2.includes(x));

filter()方法接受一个回调函数作为参数。该回调函数被应用于第一个数组(arr1)的每个元素,并使用includes()方法检查当前元素(x)是否存在于第二个数组(arr2)中。如果当前元素(x)存在于第二个数组(arr2)中,则将其包含在新数组(intersection)中。

如果当前元素(x)不存在于第二个数组(arr2)中,则将其从新数组(intersection)中排除。最终结果是一个新数组(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的元素中创建一个新的set对象。这将删除任何重复的元素。然后使用展开运算符将set对象转换为数组。该数组没有重复元素。现在我们使用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

在这个方法中,首先,我们使用新的 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操作符和Set。在第三种方法中,我们创建了一个自定义函数来执行此任务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程