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函数。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP