我有以下输入数组:
permissions = [1,2,3,4,5,6,7,8,9,19];
allowedPermissions1 = [1,2];
allowedPermissions2 = [3,4,5,6];
我想要做的是创建一个辅助函数来确定父数组(在本例中为 permissions
)是否包含来自至少一个其他数组(allowedPermissions1
或allowedPermissions2
- 可以超过 2)。
我目前的实现如下:
allowedPermissions1.every(x => permissions.includes(x)) || allowedPermissions2.every(x => permissions.includes(x));
我想有一个数组数组作为助手的参数,并为每个子数组应用上述逻辑(结果之间有 OR
)。
实际上,对每个子数组应用every
函数,然后对结果应用some
。
答案 0 :(得分:2)
您可以使用 https://docs.scylladb.com/architecture/sstable/sstable2/sstable-data-file/、Array.some 和 Array.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);