检查数组是否包含另一个数组的所有元素 – JavaScript

检查数组是否包含另一个数组的所有元素

Check if Array has all Elements of Another Array – JavaScript

检查一个数组是否包含另一个数组的所有元素:

  1. Array.every()在第一个数组上调用该方法。
  2. 检查数组中的每个元素是否包含在第二个数组中。
  3. 如果所有元素都满足条件,则该数组具有另一个数组的所有元素。
索引.js
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
索引.js
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() 检查数组是否包含另一个数组的所有元素

这是一个三步过程:

  1. Array.every()在第一个数组上调用该方法。
  2. 检查是否在第二个数组中找到每个元素的索引。
  3. 如果所有元素都满足条件,则该数组具有另一个数组的所有元素。
索引.js
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

索引.js
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 检查数组是否包含另一个数组的所有元素

这是一个三步过程:

  1. 声明一个布尔变量,将其设置为true.
  2. 使用for...of循环遍历第一个数组。
  3. 如果值不包含在第二个数组中,则将变量设置为false
索引.js
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语句用于循环遍历可迭代对象,如数组、字符串MapSet
NodeList对象generators

在每次迭代中,我们使用该Array.includes()方法检查第二个数组是否包含当前值。

如果不满足条件,我们将containsAll变量设置为false并跳出循环。

请注意,我们使用关键字声明了变量let

索引.js
let containsAll = true;

const这是必要的,因为无法重新分配使用声明的变量。

break语句用于退出循环以避免不必要的迭代。

您还可以使用基本for循环来检查一个数组中的所有元素是否存在于另一个数组中。

检查数组是否包含另一个数组的所有元素for

for下面是使用基本循环实现相同结果的示例。

索引.js
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()方法,因为我发现它非常直观和直接。

我还写了一篇关于
如何检查一个数组是否包含另一个数组的任何元素的文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: