检查 javascript 数组是否包含另一个数组的所有元素或部分元素值
Check if a javascript array contains all elements or part of element values of another array
我正在寻找以下问题的解决方案:
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
匹配时的结果应该是:
//needle_1 haystack_1 -> true
//needle_1 haystack_2 -> false
//needle_1 haystack_3 -> true
已经为整个单词工作:
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(haystack.indexOf(needle[i]) === -1)
return false;
}
return true;
}
这非常适合精确匹配,例如:
var needle_2 = ['apple', 'banana', 'bloodorange'];
return arrayContainsAnotherArray(needle_2 , haystack_1); //false
return arrayContainsAnotherArray(needle_2 , haystack_2); //false
return arrayContainsAnotherArray(needle_2 , haystack_3); //true
如何将此功能与单词的匹配部分结合起来?
只是轻微的功能修改....
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(!haystack.some(hay => hay.indexOf(needle[i]) > -1))
return false;
}
return true;
}
只是检查是否 "there is not some item in the haystack that contains the neddle, return false"
注意区分大小写。
您可以使用 Array#every()
和 Array#some()
以及 String#includes()
进行部分匹配
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
function arrayContainsAnotherArray(needle, haystack){
return haystack.every(s=> needle.some(v => s.includes(v)))
}
var needle_2 = ['apple', 'banana', 'bloodorange'];
console.log(arrayContainsAnotherArray(needle_2 , haystack_1)); //false
console.log(arrayContainsAnotherArray(needle_2 , haystack_2)); //false
console.log(arrayContainsAnotherArray(needle_2 , haystack_3)); //true
你可以用includes
来对照大海捞针。
function check(needle, haystack) {
return haystack.every(h => needle.some(n => h.includes(n)));
}
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
console.log(check(needle_1, haystack_1)); // true
console.log(check(needle_1, haystack_2)); // false
console.log(check(needle_1, haystack_3)); // true
您可以使用 every
和 includes
来检查所有部分:
function arrayContainsAnotherArray(needle, haystack) {
return needle.every(el => !!haystack.find(item => item.includes(el)));
}
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
console.log(arrayContainsAnotherArray(needle_1, haystack_1));
console.log(arrayContainsAnotherArray(needle_1, haystack_2));
console.log(arrayContainsAnotherArray(needle_1, haystack_3));
这适用于匹配正则表达式而不是字符串相等,但它匹配大海捞针中的任何地方,所以它 returns 对于你的第二个例子是正确的,因为找到了苹果和香蕉。
function needle_matches(haystack, needles) {
for(var i = 0; i < needles.length; i++){
if(haystack.some(function(e) { e.match(needles[i]) })) {
return true;
}
}
return false;
}
我正在寻找以下问题的解决方案:
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
匹配时的结果应该是:
//needle_1 haystack_1 -> true
//needle_1 haystack_2 -> false
//needle_1 haystack_3 -> true
已经为整个单词工作:
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(haystack.indexOf(needle[i]) === -1)
return false;
}
return true;
}
这非常适合精确匹配,例如:
var needle_2 = ['apple', 'banana', 'bloodorange'];
return arrayContainsAnotherArray(needle_2 , haystack_1); //false
return arrayContainsAnotherArray(needle_2 , haystack_2); //false
return arrayContainsAnotherArray(needle_2 , haystack_3); //true
如何将此功能与单词的匹配部分结合起来?
只是轻微的功能修改....
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(!haystack.some(hay => hay.indexOf(needle[i]) > -1))
return false;
}
return true;
}
只是检查是否 "there is not some item in the haystack that contains the neddle, return false"
注意区分大小写。
您可以使用 Array#every()
和 Array#some()
以及 String#includes()
进行部分匹配
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
function arrayContainsAnotherArray(needle, haystack){
return haystack.every(s=> needle.some(v => s.includes(v)))
}
var needle_2 = ['apple', 'banana', 'bloodorange'];
console.log(arrayContainsAnotherArray(needle_2 , haystack_1)); //false
console.log(arrayContainsAnotherArray(needle_2 , haystack_2)); //false
console.log(arrayContainsAnotherArray(needle_2 , haystack_3)); //true
你可以用includes
来对照大海捞针。
function check(needle, haystack) {
return haystack.every(h => needle.some(n => h.includes(n)));
}
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
console.log(check(needle_1, haystack_1)); // true
console.log(check(needle_1, haystack_2)); // false
console.log(check(needle_1, haystack_3)); // true
您可以使用 every
和 includes
来检查所有部分:
function arrayContainsAnotherArray(needle, haystack) {
return needle.every(el => !!haystack.find(item => item.includes(el)));
}
var haystack_1 = ['banana', 'apple', 'orange'];
var haystack_2 = ['banana', 'apple', 'lemon'];
var haystack_3 = ['banana', 'apple', 'bloodorange'];
var needle_1 = ['apple', 'banana', 'or'];
console.log(arrayContainsAnotherArray(needle_1, haystack_1));
console.log(arrayContainsAnotherArray(needle_1, haystack_2));
console.log(arrayContainsAnotherArray(needle_1, haystack_3));
这适用于匹配正则表达式而不是字符串相等,但它匹配大海捞针中的任何地方,所以它 returns 对于你的第二个例子是正确的,因为找到了苹果和香蕉。
function needle_matches(haystack, needles) {
for(var i = 0; i < needles.length; i++){
if(haystack.some(function(e) { e.match(needles[i]) })) {
return true;
}
}
return false;
}