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

例如:

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

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

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

如何在JavaScript中实现?


当前回答

我的解决方案应用了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;

其他回答

香草js

/**
 * @description determine if an array contains one or more items from another array.
 * @param {array} haystack the array to search.
 * @param {array} arr the array providing items to check for in the haystack.
 * @return {boolean} true|false if haystack contains at least one item from arr.
 */
var findOne = function (haystack, arr) {
    return arr.some(function (v) {
        return haystack.indexOf(v) >= 0;
    });
};

正如@loganofsmyth所指出的,您可以在ES2016中将其缩短为

/**
 * @description determine if an array contains one or more items from another array.
 * @param {array} haystack the array to search.
 * @param {array} arr the array providing items to check for in the haystack.
 * @return {boolean} true|false if haystack contains at least one item from arr.
 */
const findOne = (haystack, arr) => {
    return arr.some(v => haystack.includes(v));
};

或者简单地称为arr.some(v=>haystalk.includes(v));

如果要确定数组是否包含其他数组中的所有项,请将some()替换为every()或作为arr.every(v=>haystalk.includes(v));

就我个人而言,我会使用以下功能:

var arrayContains = function(array, toMatch) {
    var arrayAsString = array.toString();
    return (arrayAsString.indexOf(','+toMatch+',') >-1);
}

“toString()”方法将始终使用逗号分隔值。仅适用于基本类型。

如果你不反对使用图书馆,http://underscorejs.org/有一种相交方法,可以简化这一点:

var _ = require('underscore');

var target = [ 'apple', 'orange', 'banana'];
var fruit2 = [ 'apple', 'orange', 'mango'];
var fruit3 = [ 'mango', 'lemon', 'pineapple'];
var fruit4 = [ 'orange', 'lemon', 'grapes'];

console.log(_.intersection(target, fruit2)); //returns [apple, orange]
console.log(_.intersection(target, fruit3)); //returns []
console.log(_.intersection(target, fruit4)); //returns [orange]

交集函数将返回一个包含匹配项的新数组,如果不匹配,则返回空数组。

一个简短的写法:找到常量=arr1.some(arr2.includes)

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

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

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