如何检查数组是否包含来自另一个数组之一的所有元素

时间:2021-06-16 08:29:18

标签: javascript typescript

我有以下输入数组:

permissions = [1,2,3,4,5,6,7,8,9,19];
allowedPermissions1 = [1,2];
allowedPermissions2 = [3,4,5,6];

我想要做的是创建一个辅助函数来确定父数组(在本例中为 permissions)是否包含来自至少一个其他数组(allowedPermissions1allowedPermissions2 - 可以超过 2)。

我目前的实现如下:

allowedPermissions1.every(x => permissions.includes(x)) || allowedPermissions2.every(x => permissions.includes(x));

我想有一个数组数组作为助手的参数,并为每个子数组应用上述逻辑(结果之间有 OR)。

实际上,对每个子数组应用every函数,然后对结果应用some

1 个答案:

答案 0 :(得分:2)

您可以使用 https://docs.scylladb.com/architecture/sstable/sstable2/sstable-data-file/Array.someArray.every 来测试每个权限数组,以查看其所有元素是否都存在于权限数组中。

因此,如果 any allowedPermissions 数组的所有值都存在于权限集中,我们将返回 true

我已更新为将权限设置为 Set,因为这应该更有效。

permissions = new Set([1,2,3,4,5,6,7,8,9,19]);
allowedPermissions =[ [1,2], [3,4,5,6]];

let result = allowedPermissions.some(allowed => { 
    return allowed.every(el => permissions.has(el));
});

console.log("Result: ", result);

另一个例子(权限不包括所有必需的值):

permissions = new Set([1,4,5,6,7,8,9,19]);
allowedPermissions =[ [1,2], [3,4,5,6]];

let result = allowedPermissions.some(allowed => { 
    return allowed.every(el => permissions.has(el));
});

console.log("Result: ", result);