只是想知道,有没有办法向 .includes 方法添加多个条件,例如:
var value = str.includes("hello", "hi", "howdy");
想象一下逗号表示“或”。
它现在询问字符串是否包含 hello、hi或howdy。所以只有当一个,并且只有一个条件为真。
有没有办法做到这一点?
只是想知道,有没有办法向 .includes 方法添加多个条件,例如:
var value = str.includes("hello", "hi", "howdy");
想象一下逗号表示“或”。
它现在询问字符串是否包含 hello、hi或howdy。所以只有当一个,并且只有一个条件为真。
有没有办法做到这一点?
您可以使用此处.some
引用的方法。
该
some()
方法测试数组中是否至少有一个元素通过了提供的函数实现的测试。
// test cases
const str1 = 'hi hello, how do you do?';
const str2 = 'regular string';
const str3 = 'hello there';
// do the test strings contain these terms?
const conditions = ["hello", "hi", "howdy"];
// run the tests against every element in the array
const test1 = conditions.some(el => str1.includes(el));
const test2 = conditions.some(el => str2.includes(el));
// strictly check that contains 1 and only one match
const test3 = conditions.reduce((a,c) => a + str3.includes(c), 0) == 1;
// display results
console.log(`Loose matching, 2 matches "${str1}" => ${test1}`);
console.log(`Loose matching, 0 matches "${str2}" => ${test2}`);
console.log(`Exact matching, 1 matches "${str3}" => ${test3}`);
此外,正如用户在下面提到的,匹配上面提到的“恰好一个”外观(并且由 OP 要求)也很有趣。这可以通过类似地计算与 1 的交点.reduce
并稍后检查它们是否等于 1 来完成。
使用includes()
,不,但您可以通过test()
以下方式使用 REGEX 实现相同的功能:
var value = /hello|hi|howdy/.test(str);
或者,如果这些词来自动态来源:
var words = ['hello', 'hi', 'howdy'];
var value = new RegExp(words.join('|')).test(str);
REGEX 方法是一个更好的主意,因为它允许您将单词匹配为实际单词,而不是其他单词的子串。你只需要词边界标记\b
,所以:
var str = 'hilly';
var value = str.includes('hi'); //true, even though the word 'hi' isn't found
var value = /\bhi\b/.test(str); //false - 'hi' appears but not as its own word
即使只有一个条件为真,这也应该有效:
var str = "bonjour le monde vive le javascript";
var arr = ['bonjour','europe', 'c++'];
function contains(target, pattern){
var value = 0;
pattern.forEach(function(word){
value = value + target.includes(word);
});
return (value === 1)
}
console.log(contains(str, arr));
你也可以做这样的事情:
const str = "hi, there"
const res = str.includes("hello") || str.includes("hi") || str.includes('howdy');
console.log(res);
每当您的一个包含返回 true 时,value 将为 true,否则,它将为 false。这与 ES6 完美配合。
这可以通过使用Array 和 RegEx 的一些/所有方法来完成。
要检查字符串中是否存在 list(array) 中的所有单词:
const multiSearchAnd = (text, searchWords) => (
searchWords.every((el) => {
return text.match(new RegExp(el,"i"))
})
)
multiSearchAnd("Chelsey Dietrich Engineer 2018-12-11 Hire", ["cle", "hire"]) //returns false
multiSearchAnd("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "hire"]) //returns true
要检查字符串中是否存在 list(array) 中的任何单词:
const multiSearchOr = (text, searchWords) => (
searchWords.some((el) => {
return text.match(new RegExp(el,"i"))
})
)
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "hire"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["aaa", "hire"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "zzzz"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["aaa", "1111"]) //returns false