检查数组是否包含另一个数组的所有元素
Check if Array has all Elements of Another Array – JavaScript
检查一个数组是否包含另一个数组的所有元素:
Array.every()
在第一个数组上调用该方法。- 检查数组中的每个元素是否包含在第二个数组中。
- 如果所有元素都满足条件,则该数组具有另一个数组的所有元素。
const arr1 = ['pizza', 'cola']; const arr2 = ['pizza', 'cake', 'cola']; const containsAll = arr1.every(element => { return arr2.includes(element); }); console.log(containsAll); // 👉️ true
我们传递给Array.every方法的函数
是用数组的每个元素调用的,应该返回一个 truthy 或 falsy 值。
如果回调函数的所有调用都返回真值,则该
Array.every
方法返回true
,否则false
返回 。
Array.every
方法迭代第一个数组。要检查每个值是否包含在第二个数组中,请使用该方法。 Array.includes
const arr1 = ['pizza', 'cola']; console.log(arr1.includes('cola')); // 👉️ true console.log(arr1.includes('XYZ')); // 👉️ false
如果我们传递给该Array.every()
方法的回调函数返回一个假值,那么Array.every()
也会返回false
.
falsy
值,则该Array.every
方法短路返回。 false
或者,您可以使用该Array.indexOf()
方法。
使用 Array.every() 检查数组是否包含另一个数组的所有元素
这是一个三步过程:
Array.every()
在第一个数组上调用该方法。- 检查是否在第二个数组中找到每个元素的索引。
- 如果所有元素都满足条件,则该数组具有另一个数组的所有元素。
const arr1 = ['pizza', 'cola']; const arr2 = ['pizza', 'cake', 'cola'] const containsAll = arr1.every(element => { return arr2.indexOf(element) !== -1; }); console.log(containsAll); // 👉️ true
Array.every
方法才返回。true
我们使用该Array.every()
方法迭代第一个数组。
在每次迭代中,我们检查当前元素是否包含在第二个数组中。
Array.indexOf方法返回数组中提供的值的索引。如果在数组中找不到该值,则该方法返回-1
。
const arr1 = ['pizza', 'cake', 'cola']; console.log(arr1.indexOf('cola')); // 👉️ 2 console.log(arr1.indexOf('XYZ')); // 👉️ -1
该arr2
数组包含 的所有元素arr1
,因此该方法的返回值Array.indexOf
永远不会等于-1
。
Array.every()
方法完成迭代后,它返回true
。
或者,您可以使用for...of
循环。
使用 for…of 检查数组是否包含另一个数组的所有元素
这是一个三步过程:
- 声明一个布尔变量,将其设置为
true
. - 使用
for...of
循环遍历第一个数组。 - 如果值不包含在第二个数组中,则将变量设置为
false
。
const arr1 = ['pizza', 'cola']; const arr2 = ['pizza', 'cake', 'cola']; let containsAll = true; for (const element of arr1) { if (!arr2.includes(element)) { containsAll = false; break; } } console.log(containsAll); // 👉️ true
我们使用for...of
循环遍历第一个数组。
for …of语句用于循环遍历可迭代对象,如数组、字符串Map
、Set
和
NodeList
对象generators
。
在每次迭代中,我们使用该Array.includes()
方法检查第二个数组是否包含当前值。
如果不满足条件,我们将containsAll
变量设置为false
并跳出循环。
请注意,我们使用关键字声明了变量let
。
let containsAll = true;
const
这是必要的,因为无法重新分配使用声明的变量。
该break
语句用于退出循环以避免不必要的迭代。
您还可以使用基本for
循环来检查一个数组中的所有元素是否存在于另一个数组中。
检查数组是否包含另一个数组的所有元素for
for
下面是使用基本循环实现相同结果的示例。
const arr1 = ['pizza', 'cola']; const arr2 = ['pizza', 'cake', 'cola']; let containsAll = true; for (let index = 0; index < arr1.length; index++) { if (!arr2.includes(arr1[index])) { containsAll = false; break; } } console.log(containsAll); // 👉️ true
代码示例与上一个非常相似。
但是,我们没有使用for...of
迭代数组,而是使用了一个基本
for
循环。
您选择哪种方法是个人喜好的问题。我会使用该
Array.every()
方法,因为我发现它非常直观和直接。
我还写了一篇关于
如何检查一个数组是否包含另一个数组的任何元素的文章。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: