JavaScript程序查找重复数组中缺失的元素


我们需要编写一个JavaScript程序来识别重复数组中缺失的元素。程序的输入将是一个包含重复元素的数组,只有一个元素缺失。程序应该能够识别缺失的元素并将其作为输出返回。

解决这个问题的先决条件需要了解JavaScript数组以及如何操作它们来查找缺失的元素。我们必须开发一个高效的程序,能够处理包含许多重复元素的大型数组。

问题陈述

我们有两个数组,它们彼此重复,只有一个元素除外,即其中一个数组中缺少一个元素,我们需要找到这个缺失的元素。

示例

给出以下两个数组:

输入

[1, 2, 3, 4, 5, 6]
[1, 3, 4, 5, 6]

输出

2

第二个数组中缺失的元素是 2。我们需要找到这个缺失的元素。

示例

给出以下两个数组:

输入

['a', 'b', 'c', 'd', 'e']
['a', 'c', 'd', 'e']

输出

b

第二个数组中缺失的元素是 b。我们需要找到这个缺失的元素。

现在我们将研究一些解决上述问题的方法。

方法一:使用for循环

在这种方法中,我们将迭代第一个数组中的元素,并检查它们是否存在于第二个数组中。如果一个元素不存在于第二个数组中,那么它就是我们缺失的元素。

算法

  • 初始化一个变量来保存缺失的元素。

  • 遍历第一个数组。

  • 对于第一个数组中的每个元素,使用嵌套循环检查它是否存在于第二个数组中。

  • 如果该元素不存在于第二个数组中,则将其赋值给缺失元素变量并退出嵌套循环。

  • 返回缺失的元素。

示例

<!DOCTYPE html>
<html>
<body>
   <h2>Find the Missing Element in a Duplicated Array</h2>
   <div id="arrays"></div>
   <br>
   <div id="output"></div>
   <script>
      function findMissingElementUsingForLoop(arr1, arr2) {
         let missingElement;
         for (let i = 0; i < arr1.length; i++) {
            let found = false;
            for (let j = 0; j < arr2.length; j++) {
               if (arr1[i] === arr2[j]) {
                  found = true;
                  break;
               }
            }
            if (!found) {
               missingElement = arr1[i];
               break;
            }
         }
         return missingElement;
      }
      const arr1 = [1, 2, 3, 4, 5, 6];
      const arr2 = [1, 3, 4, 5, 6];
      const arraysDiv = document.getElementById("arrays");
      arraysDiv.innerHTML = `Array 1: ${arr1.join(", ")}<br>Array 2: ${arr2.join(", ")}`;
      const missingElement = findMissingElementUsingForLoop(arr1, arr2);
      document.getElementById("output").innerHTML = `The missing element is: ${missingElement}`;
   </script>
</body>
</html>

方法二:使用Filter和IndexOf函数

在这种方法中,我们将使用filter函数查找不在两个数组中的元素,然后使用indexOf函数返回该元素。

算法

  • 定义一个函数`findMissingElementUsingFilterAndIndexOf`,它接受两个数组作为输入。

  • 使用filter函数创建一个新数组,其中包含arr1中所有不在arr2中的元素。

  • 使用indexOf函数返回新数组中的第一个元素。

示例

<!DOCTYPE html>
<html>
<body>
   <h2>Find the Missing Element in a Duplicated Array</h2>
   <div id="arrays"></div>
   <br>
   <div id="output"></div>
   <script>
      function findMissingElementUsingFilterAndIndexOf(arr1, arr2) {
         const diffArr = arr1.filter(element => !arr2.includes(element));
         return diffArr[0];
      }
      const arr1 = [11, 22, 33, 44, 55, 66];
      const arr2 = [11, 33, 44, 55, 66];
      const arraysDiv = document.getElementById("arrays");
      arraysDiv.innerHTML = `Array 1: ${arr1.join(", ")}<br>Array 2: ${arr2.join(", ")}`;
      const missingElement = findMissingElementUsingFilterAndIndexOf(arr1, arr2);
      document.getElementById("output").innerHTML = `The missing element is: ${missingElement}`;
   </script>
</body>
</html>

方法三:使用Reduce函数

在这种方法中,我们将使用reduce函数查找两个数组中所有元素的总和。然后,我们将从第一个数组的总和中减去第二个数组的总和,以获得缺失的元素。

算法

  • 定义一个函数**`findMissingElementUsingReduce`**,它接受两个数组作为输入。

  • 对第一个数组使用**`reduce`**函数来查找所有元素的总和,并将其赋值给变量**`sum1`**。

  • 对第二个数组使用**`reduce`**函数来查找所有元素的总和,并将其赋值给变量**`sum2`**。

  • 从**`sum1`**中减去**`sum2`**以获得缺失的元素。

  • 返回缺失的元素。

示例

<!DOCTYPE html>
<html>
<body>
   <h2>Find the Missing Element in a Duplicated Array</h2>
   <div id="arrays"></div>
   <br>
   <div id="output"></div>
   <script>
      function findMissingElementUsingReduce(arr1, arr2) {
         const sum1 = arr1.reduce((acc, curr) => acc + curr, 0);
         const sum2 = arr2.reduce((acc, curr) => acc + curr, 0);
         const missingElement = sum1 - sum2;
         return missingElement;
      }
      const arr1 = [121, 122, 123, 124, 125, 126];
      const arr2 = [121, 123, 124, 125, 126];
      const arraysDiv = document.getElementById("arrays");
      arraysDiv.innerHTML = `Array 1: ${arr1.join(", ")}<br>Array 2: ${arr2.join(", ")}`;
      const missingElement = findMissingElementUsingReduce(arr1, arr2);
      document.getElementById("output").innerHTML = `The missing element is: ${missingElement}`;
   </script>
</body>
</html>

方法四:使用Set对象

这是我们最后一种方法,可以编写一个代码来查找重复数组中缺失的元素。在这里,我们可以从其中一个数组创建一个新的Set对象,然后检查另一个数组中的每个元素是否存在于Set中。如果一个元素不存在于Set中,那么它一定是缺失的元素。

算法

  • 从其中一个数组创建一个新的Set对象。

  • 遍历另一个数组,并检查每个元素是否存在于Set中。

  • 如果一个元素不存在于Set中,那么它就是缺失的元素。

  • 返回缺失的元素。

示例

<!DOCTYPE html>
<html>
<body>
   <h2>Find the Missing Element in a Duplicated Array</h2>
   <div id="arrays"></div>
   <br>
   <div id="output"></div>
   <script>
      function findMissingElementUsingSet(arr1, arr2) {
         const set = new Set(arr2);
         for (let element of arr1) {
            if (!set.has(element)) {
               return element;
            }
         }
         return null;
      }
      const arr1 = [134, 234, 334, 434, 534, 634];
      const arr2 = [134, 334, 434, 534, 634];
      const arraysDiv = document.getElementById("arrays");
      arraysDiv.innerHTML = `Array 1: ${arr1.join(", ")}<br>Array 2: ${arr2.join(", ")}`;
      const missingElement = findMissingElementUsingSet(arr1, arr2);
      const outputDiv = document.getElementById("output");
      if (missingElement !== null) {
         outputDiv.innerHTML = `The missing element is: ${missingElement}`;
      } else {
         outputDiv.innerHTML = "There is no missing element in the arrays.";
      }
   </script>
</body>
</html>

结论

在这篇博客中,我们讨论了四种从重复数组中查找缺失元素的方法,分别是使用for循环、使用reduce函数、使用set对象和使用Filter和IndexOf函数。

更新于:2023年4月10日

959 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.