我有一个目标数组["apple","banana","orange"]
,我想检查其他数组是否包含任何一个目标数组元素。
例如:
["apple","grape"] //returns true;
["apple","banana","pineapple"] //returns true;
["grape", "pineapple"] //returns false;
我如何在JavaScript中实现它?
发布于 2014-09-19 12:52:35
香草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;
});
};
正如@loganfsmyth所指出的,您可以在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 => haystack.includes(v));
如果要确定该数组是否包含其他数组中的所有项,请将some()
替换为every()
或替换为arr.every(v => haystack.includes(v));
发布于 2019-07-14 17:55:21
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) );
希望,这将是有益的。
发布于 2013-05-01 12:16:50
如果你不反对使用图书馆,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]
intersection函数将返回一个新的数组,其中包含它匹配的项,如果不匹配,则返回空数组。
https://stackoverflow.com/questions/16312528
复制相似问题