JavaScript 中两个数组的子集
上述问题陈述中,我们的目标是使用 JavaScript 功能并确定给定的数组是否是彼此的子集。因此,使用循环我们可以解决这个问题。
理解问题
问题描述指定我们必须确定给定的数组是另一个数组的子集。或者我们必须检查第二个数组中的所有项目是否存在于第一个数组中。例如,假设我们有一个数组 ['a', 'b', 'c', 'd', 'e'] 和第二个数组 ['b', 'd', 'e']。因此,当我们比较这两个数组以检查子集时,结果将为真。因为第二个数组的所有项目都存在于第一个数组中。
给定问题的逻辑
为了解决这个问题,我们将使用 Set 构造函数从第一个数组创建一个集合,并启用 has 方法来检查项目是否存在。接下来,我们将遍历第二个数组并验证集合中是否存在每个项目。如果未找到该项目,我们将返回 false。如果我们成功遍历了第二个数组中的所有项目,那么我们将得出结论,它是第一个数组的子集并返回 true。
算法
步骤 1:使用函数检查给定的数组是否是另一个数组的子集。然后在函数内部,我们将传递两个数组作为输入。
步骤 2:接下来从输入数组中创建一个集合。
步骤 3:借助循环遍历数组的数组项。
步骤 4:验证条件,第一个数组中的当前项是否存在于第二个数组中。如果条件满足,则返回 true,否则返回 false。
示例
// 用于检查数组子集的函数
function isArraySubset(arr1, arr2) {
const set = new Set(arr1);
for (let i = 0; i < arr2.length; i++) {
if (!set.has(arr2[i])) {
return false;
}
}
return true;
}
const arr1 = [10, 24, 38, 14, 85];
const arr2 = [24, 14, 85];
const arr3 = [16, 67, 78];
console.log(isArraySubset(arr1, arr2));
console.log(isArraySubset(arr3, arr1));
输出
true false
复杂度
该算法的时间复杂度为 O(n),其中 n 是第二个数组的大小。由于我们使用了平均时间复杂度为 O(1) 的"has"方法。因此,我们在集合中执行了 n 次查找,这就是复杂度导致线性时间的原因。
结论
我们程序中给出的代码借助 Set 有效地确定了一个数组是第二个数组的子集。该代码的时间复杂度为 O(n),这对于大多数实际场景来说是一种有效的解决方案。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

