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

例如:

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

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

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

如何在JavaScript中实现?


当前回答

还有一个解决方案

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)

其他回答

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

我的解决方案应用了Array.prototype.some()和Array.proto原型.includes()数组助手,它们的工作效率也很高

ES6型const originalFruits=[“苹果”、“香蕉”、“橙子”];const fruits1=[“苹果”、“香蕉”、“菠萝”];const fruits2=[“葡萄”,“菠萝”];const commonFruits=(myFruitsArr,otherFruitsAr)=>{return myFruitsArr.some(fruit=>otherFruitsAr.includes(fruit))}console.log(commonFruits(originalFruits,fruits1))//返回true;console.log(commonFruits(originalFruits,fruits2))//返回false;

这可以通过简单地遍历主数组并检查其他数组是否包含任何目标元素来完成。

试试看:

function Check(A) {
    var myarr = ["apple", "banana", "orange"];
    var i, j;
    var totalmatches = 0;
    for (i = 0; i < myarr.length; i++) {
        for (j = 0; j < A.length; ++j) {
            if (myarr[i] == A[j]) {

                totalmatches++;

            }

        }
    }
    if (totalmatches > 0) {
        return true;
    } else {
        return false;
    }
}
var fruits1 = new Array("apple", "grape");
alert(Check(fruits1));

var fruits2 = new Array("apple", "banana", "pineapple");
alert(Check(fruits2));

var fruits3 = new Array("grape", "pineapple");
alert(Check(fruits3));

JSFIDDLE演示

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