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

例如:

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

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

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

如何在JavaScript中实现?


当前回答

ES6(最快)

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v=> b.indexOf(v) !== -1)

2016年

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v => b.includes(v));

强调

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
_.intersection(a, b)

演示:https://jsfiddle.net/r257wuv5/

jsPerf(性能):https://jsperf.com/array-contains-any-element-of-another-array

其他回答

当我看你的答案时,我找不到我想要的答案。我自己做了一些事,我想和你分享。

只有当输入的单词(数组)正确时,它才为真。

函数包含(a,b){让计数器=0;对于(var i=0;i<b.length;i++){;如果(a.包括(b[i]))计数器++;}如果(counter==b.length)返回true;return false;}让main_array=['fo','bar','baz'];设sub_array_a=['fo','obar'];设sub_array_b=['fo','bar'];console.log(包含(main_array,sub_array_a));//返回falseconsole.log(包含(main_array,sub_array_b));//返回true

使用一些/findIndex和indexOf的组合怎么样?

所以类似这样:

var array1 = ["apple","banana","orange"];
var array2 = ["grape", "pineapple"];

var found = array1.some(function(v) { return array2.indexOf(v) != -1; });

为了使其更可读,可以将此功能添加到Array对象本身。

Array.prototype.indexOfAny = function (array) {
    return this.findIndex(function(v) { return array.indexOf(v) != -1; });
}

Array.prototype.containsAny = function (array) {
    return this.indexOfAny(array) != -1;
}

注意:如果您想对谓词执行某些操作,可以用另一个findIndex和谓词替换内部indexOf

更新@Paul Grimshaw答案,使用includes代替indexOf以提高可读性

let found=arr1.some(r=>arr2.indexOf(r)>=0)let found=arr1.some(r=>arr2.includes(r))

带下划线js

var a1 = [1,2,3];
var a2 = [1,2];

_.every(a1, function(e){ return _.include(a2, e); } ); //=> false
_.every(a2, function(e){ return _.include(a1, e); } ); //=> 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;