我正在寻找以下问题的解决方案:
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
我还如何将此功能与单词的匹配部分结合起来?
答案 0 :(得分:2)
只是轻微的功能修改。...
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;
}
相反,只是检查“干草堆中是否没有包含项的项目,返回false”
请注意,这是区分大小写的。
答案 1 :(得分:0)
您可以将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
答案 2 :(得分:0)
您可以用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
答案 3 :(得分:0)
您可以将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));
答案 4 :(得分:0)
此方法与regex匹配而不是字符串相等,但在干草堆中的任何地方都与针匹配,因此对于第二个示例它返回true,因为找到了苹果和香蕉。
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;
}