JavaScript.includes()方法的多个条件
只是想知道,有没有一种方法可以向.includes方法添加多个条件,例如:JavaScript.includes()方法的多个条件,javascript,methods,Javascript,Methods,只是想知道,有没有一种方法可以向.includes方法添加多个条件,例如: var value=str.includes(“你好”、“你好”、“你好”); 想象一下逗号表示“或” 它现在询问字符串是否包含hello、hi或howdy。所以只有一个,而且只有一个条件是真的 有这样做的方法吗?使用includes(),没有,但是您可以通过test()使用REGEX实现同样的效果: 或者,如果单词来自动态来源: var words = array('hello', 'hi', 'howdy'); v
var value=str.includes(“你好”、“你好”、“你好”);
想象一下逗号表示“或”
它现在询问字符串是否包含hello、hi或howdy。所以只有一个,而且只有一个条件是真的
有这样做的方法吗?使用includes()
,没有,但是您可以通过test()
使用REGEX实现同样的效果:
或者,如果单词来自动态来源:
var words = array('hello', 'hi', 'howdy');
var value = new RegExp(words.join('|')).test(str);
正则表达式方法是一个更好的主意,因为它允许您将单词作为实际单词进行匹配,而不是其他单词的子字符串。您只需要单词边界标记\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));
您可以使用所引用的
.some
方法
some()
方法测试数组中是否至少有一个元素
通过所提供功能执行的测试
//测试用例
var str1='你好,你好吗?';
var str2='常规字符串';
//测试字符串是否包含这些术语?
变量条件=[“你好”、“你好”、“你好”];
//对数组中的每个元素运行测试
var test1=条件。一些(el=>str1.includes(el));
var test2=条件。一些(el=>str2.includes(el));
//显示结果
log(str1,'==>',test1);
日志(str2,'==>',test2)代码>不是最好的答案,也不是最干净的,但我认为它更宽容。
例如,如果您希望对所有支票使用相同的筛选器。
实际上,.filter()
与数组一起工作,并返回一个经过过滤的数组(我发现它也更容易使用)
这里有一个选项:
允许您执行以下操作:
'Hi, hope you like this option'.toLowerCase().includesOneOf(["hello", "hi", "howdy"]) // True
console.log('Hi, hope you like this option'.toLowerCase().contains(["hello", "hi", "howdy"])); // True
这可以通过使用数组和正则表达式的some/every方法来实现
要检查列表(数组)中的所有单词是否存在于字符串中,请执行以下操作:
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
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
要检查字符串中是否存在列表(数组)中的任何单词,请执行以下操作:
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
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
再来一个
let结果
const givenStr='A,X'//用逗号或空格分隔的值。
允许的常数=['A','B']
常量gived=givenStr.split(/[\s,]+/).filter(v=>v)
log('给定(数组):',给定)
//给定值不包含或仅包含允许的值:
结果=给定。减少((acc,val)=>{
返回会计科目和允许返回会计科目。包括(val)
},对)
log('给定值不包含或仅包含允许的值:',结果)
//给定包含至少一个允许的值:
结果=给定。减少((acc,val)=>{
允许返回附件。包括(val)
},错)
console.log('given至少包含一个允许的值:',result)
您还可以执行以下操作:
const str=“你好,这里”
const res=str.includes(“你好”)|| str.includes(“你好”)|| str.includes(“你好”);
控制台日志(res)代码>扩展字符串本机原型:
if (!String.prototype.contains) {
Object.defineProperty(String.prototype, 'contains', {
value(patterns) {
if (!Array.isArray(patterns)) {
return false;
}
let value = 0;
for (let i = 0; i < patterns.length; i++) {
const pattern = patterns[i];
value = value + this.includes(pattern);
}
return (value === 1);
}
});
}
那么['hello'、'hi'、'howdy']如何。包含(str)
?如果单词包含特殊的regexp字符,则此操作无效。此外,这也不能满足OP的明显要求,它只在与单个单词匹配的情况下才匹配。或
意味着至少有一个匹配就足够了。不要使用includes方法寻找解决方案,您可以尝试如下索引:['hello','hi','howdy'].indexOf(str)
@SkanderJenhani至少在评论之前阅读并尝试一下。您的建议将始终返回-1
可以为&&
做什么?注意:some()
是一种方法,而不是运算符。否则,回答得很好。我明白了。谢谢,只是一张纸条。在Google Apps脚本中尝试此操作的任何人都会得到一个类型错误:使用indexOf('string')!=-1而不是include以避免此错误,OP说,“所以只有当一个条件为真时,并且只有一个条件为真。”对于包含所有三个单词的字符串,您的代码段将返回true,OP希望它返回false.Wow。这回答了我的两个问题。非常感谢你!!!!不,它不起作用:['hello','hi','howdy'].包括('hello,你好吗?')
返回false
,而OP要求的解决方案返回true
。
console.log('Hi, hope you like this option'.toLowerCase().contains(["hello", "hi", "howdy"])); // True