在inclus()中使用“OR”运算符来试验字符串中是否存在任何子字符串?

我注意到,当尝试在这样的函数中使用OR运算符时includes()

x.includes("dogs"||"cats"||"birds"||"fish"||"frogs")

它只会试用包含的第一个字符串,而不会进一步尝试。我怀疑我在这里错过了一些明显的东西,或者不是用于这种情况的正确功能。includes()

目标是试验多个字符串,以确定它们是否是 x 的子字符串。因为我尝试使用 or 运算符,所以我的意图是不要为每个试验字符串接收一个布尔值数组,而是如果有任何值为 true,则需要一个 true 的布尔值,否则需要 false。

=

慕虎7371278
浏览 77回答 3
3回答

幕布斯7119047

运算符不是可分配的。函数参数只是作为表达式计算,因此您的调用等效于:||var temp = "dogs"||"cats"||"birds"||"fish"||"frogs"; x.includes(temp)一系列操作的值是该系列中的第一个真值。由于所有非空字符串都是真实的,因此这等效于:||var temp = "dogs"; x.includes(temp)您需要在调用每个字符串的结果上使用:||includesx.includes("dogs") || x.includes("cats") || x.includes("birds") ...您可以使用数组方法简化此操作:some()["dogs","cats","birds","fish","frogs"].some(species => x.includes(species))

饮歌长啸

includes只查找一个字符串。您可以使用 .matchAll() 函数,该函数返回所有匹配结果的迭代器const regex = /dogs|cats|birds|fish|frogs/g;const str = 'the dogs, cats, fish and frogs all watched birds flying above them';    const exists = [...str.matchAll(regex)].length > 0;console.log(exists);

慕勒3428872

对于这种情况,使用正则表达式和所需的布尔结果,RegExp#test派上用场。此方法不返回迭代器,并且不需要数组即可获取迭代器的长度。const    regex = /dogs|cats|birds|fish|frogs/g,    str = 'the dogs, cats, fish and frogs all watched birds flying above them',    exists = regex.test(str);console.log(exists);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript