如何使用 JavaScript 检查一个数组是否为另一个数组的子集?
如果第二个数组包含第一个数组的所有元素,则第一个数组是第二个数组的子集。因此,有时我们可能需要检查一个数组是否为另一个数组的子集。
在本教程中,我们将学习使用三种不同的方法来检查一个数组是否为另一个数组的子集。
使用 for 循环和 array.includes() 方法
用户可以使用 for 循环遍历第一个数组的每个元素。之后,他们可以使用 includes() 方法检查第二个数组是否包含第一个数组的每个元素。
如果第二个数组包含第一个数组的所有元素,则第一个数组是第二个数组的子集。
语法
用户可以按照以下语法使用 for 循环和 includes() 方法来确定一个数组是否为另一个数组的子集。
for (let ele of array1) { if (!array2.includes(ele)) { return false; } }
在上面的语法中,我们检查 array1 是否为 array2 的子集。
算法
步骤 1 − 我们将检查 array1 是否为 array2 的子集。
步骤 2 − 使用 for-of 循环遍历数组的每个元素。
步骤 3 − 使用 array.includes() 方法检查 array1 的每个元素是否包含在 array2 中。
步骤 4 − 如果 array1 中的任何一个元素都不包含在 array2 中,则返回 false。
步骤 5 − 如果 array2 包含 array1 的所有元素,则 for 循环迭代将成功并返回 true。
示例
我们在下面的示例中创建了三个包含不同数字值的数组。我们创建了 isSubset() 函数,它将两个数组作为参数。该函数检查 array1 是否为 array2 的子集,并根据该结果返回布尔值。
我们正在检查 array2 和 array3 是否为 array1 的子集。用户可以在输出中观察结果。
<html> <body> <h3>Using the <i>for loop and includes() method</i> to determine if one array is a subset of another array.</h3> <p id = "output"> </p> <script> let output = document.getElementById("output"); let array1 = [10, 20, 30, 40, 50, 60, 70, 80, 90]; let array2 = [20, 30, 70, 80]; let array3 = [20, 43, 45]; function isSubset(array1, array2) { // Iterating through all the elements of array1 for (let ele of array1) { // check if array2 contains the element of array1 if (!array2.includes(ele)) { output.innerHTML += "The " + array1 + " is not a subset of " + array2 + "<br>"; return false; } } output.innerHTML += "The " + array1 + " is a subset of " + array2 + "<br>"; // If array1 contains all elements of array2 return true return true; } isSubset(array2, array1); isSubset(array3, array1) </script> </body> </html>
使用 array.some() 和 array.indexOf() 方法
array.some() 方法将回调函数作为参数,该函数根据参考数组中至少一个满足条件的元素返回布尔值。
array.indexOf() 方法如果元素存在于数组中则返回元素的索引;否则,它返回 -1。因此,如果我们在第一个数组中找到任何元素,其在第二个数组中的索引为 -1,则表示第一个数组不是第二个数组的子集。
语法
用户可以按照以下语法使用 array.some() 和 array.indexOf() 方法来检查一个数组是否为另一个数组的子集。
let isSubset = !data2.some((string) => data1.indexOf(string) == -1);
在上面的语法中,如果 some() 方法返回 true,则 data1 数组不是 data2 的子集。因此,我们将它的相反布尔值存储在 isSubset 变量中。
示例
下面的示例包含两个字符串数组,并检查 data1 数组是否为 data2 数组的子集。data1 数组包含 data2 的所有元素。因此,用户可以在输出中看到它表示 data2 数组是 data1 的子集。
<html> <body> <h3>Using the <i>array.some() and array.indexOf() method</i> to check if one array is a subset of another.</h3> <p id="output"></p> <script> let output = document.getElementById("output"); let data1 = ["Hello", "Hi", "Users"]; let data2 = ["Hello", "Users"]; let isSubset = !data2.some((string) => data1.indexOf(string) == -1); if (isSubset) { output.innerHTML += "The " + data2 + " is a subset of " + data1 + " array. <br>"; } else { output.innerHTML += "The " + data2 + " is not a subset of " + data1 + " array. <br>"; } </script> </body> </html>
使用 array.every() 方法和 set()
array.every() 方法如果每个元素都满足回调函数返回的条件,则返回 true。
我们可以创建所有数组元素的 set(),因为 set 包含唯一的数组元素。
语法
按照以下语法使用 set 和 every() 方法。
let setOfArray = new Set(num1); let result = num2.every(num => setOfArray.has(num));
示例
在下面的示例中,我们创建了 num1 数组所有元素的 set。之后,我们使用 javascript set 的 has() 方法检查该 set 是否包含 num2 数组的每个元素。
<html> <body> <h3>Using the <i>array.every() method and set</i> to check if one array is a subset of another array.</h3> <p id="output"></p> <button onclick="checkForSubset()">Check for subset</button> <script> let output = document.getElementById("output"); let num1 = [45, 65, 45, true, false, 45, 43, 32]; let num2 = [false, true, false, true]; function checkForSubset() { // create a set of the parent array let setOfArray = new Set(num1); // Check if every element of the child array is in the set of the parent array let result = num2.every(num => setOfArray.has(num)); if (result) { output.innerHTML += "The " + num2 + " is a subset of " + num1 + " array. <br>"; } else { output.innerHTML += "The " + num2 + " is not a subset of " + num1 + " array. <br>"; } } </script> </body> </html>