我有一个目标数组[“apple”、“banana”、“orange”],我想检查其他数组是否包含任何一个目标阵列元素。
例如:
["apple","grape"] //returns true;
["apple","banana","pineapple"] //returns true;
["grape", "pineapple"] //returns false;
如何在JavaScript中实现?
我有一个目标数组[“apple”、“banana”、“orange”],我想检查其他数组是否包含任何一个目标阵列元素。
例如:
["apple","grape"] //returns true;
["apple","banana","pineapple"] //returns true;
["grape", "pineapple"] //returns false;
如何在JavaScript中实现?
当前回答
我在node中使用下划线js提出了一个解决方案,如下所示:
var checkRole = _.intersection(['A','B'], ['A','B','C']);
if(!_.isEmpty(checkRole)) {
next();
}
其他回答
我发现这种简短而甜蜜的语法可以匹配两个数组之间的所有或某些元素。例如
//OR运算。查找array1中是否存在array2元素。当函数返回TRUE时,当某些方法中断时,一旦出现第一个匹配,就会返回该值
let array1 = ['a', 'b', 'c', 'd', 'e'], array2 = ['a', 'b'];
console.log(array2.some(ele => array1.includes(ele)));
//打印TRUE
//AND运算。查找array1中是否存在所有array2元素。当函数返回TRUE时,当某些方法中断时,一旦没有第一个匹配,就会返回该值
let array1 = ['a', 'b', 'c', 'd', 'e'], array2 = ['a', 'x'];
console.log(!array2.some(ele => !array1.includes(ele)));
//打印FALSE
希望这对将来的人有所帮助!
添加到阵列原型
免责声明:许多人强烈建议不要这样做。唯一真正有问题的是,如果一个库添加了一个同名(行为不同)的原型函数或类似的东西。
代码:
Array.prototype.containsAny = function(arr) {
return this.some(
(v) => (arr.indexOf(v) >= 0)
)
}
不使用大箭头功能:
Array.prototype.containsAny = function(arr) {
return this.some(function (v) {
return arr.indexOf(v) >= 0
})
}
用法
var a = ["a","b"]
console.log(a.containsAny(["b","z"])) // Outputs true
console.log(a.containsAny(["z"])) // Outputs false
还有一个解决方案
var a1 = [1, 2, 3, 4, 5]
var a2 = [2, 4]
检查a1是否包含a2的所有元素
var result = a1.filter(e => a2.indexOf(e) !== -1).length === a2.length
console.log(result)
香草JS
2016年:
const found = arr1.some(r=> arr2.includes(r))
ES6:
const found = arr1.some(r=> arr2.indexOf(r) >= 0)
它的工作原理
一些(..)根据测试函数检查数组的每个元素,如果数组的任何元素通过测试函数,则返回true,否则返回false。如果数组中存在给定参数,indexOf(..)>=0和includes(..)都返回true。
更新@Paul Grimshaw答案,使用includes代替indexOf以提高可读性
let found=arr1.some(r=>arr2.indexOf(r)>=0)let found=arr1.some(r=>arr2.includes(r))