我有一个目标数组[“apple”、“banana”、“orange”],我想检查其他数组是否包含任何一个目标阵列元素。

例如:

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

["grape", "pineapple"] //returns false;

如何在JavaScript中实现?


当前回答

我发现这种简短而甜蜜的语法可以匹配两个数组之间的所有或某些元素。例如

//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

希望这对将来的人有所帮助!

其他回答

香草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。

var target = ["apple","banana","orange"];
var checkArray = ["apple","banana","pineapple"];

var containsOneCommonItem = target.some(x => checkArray.some(y => y === x));`

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

["grape", "pineapple"] //returns false;

ES6溶液:

let arr1 = [1, 2, 3];
let arr2 = [2, 3];

let isFounded = arr1.some( ai => arr2.includes(ai) );

与之不同:必须包含所有值。

let allFounded = arr2.every( ai => arr1.includes(ai) );

希望,会有所帮助。

我在node中使用下划线js提出了一个解决方案,如下所示:

var checkRole = _.intersection(['A','B'], ['A','B','C']);
if(!_.isEmpty(checkRole)) { 
     next();
}

您可以使用lodash并执行以下操作:

_.intersection(originalTarget, arrayToCheck).length > 0

在两个集合上进行集合交集,生成一个相同元素的数组。