JavaScript.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

只是想知道,有没有一种方法可以向.includes方法添加多个条件,例如:

var value=str.includes(“你好”、“你好”、“你好”);
想象一下逗号表示“或”

它现在询问字符串是否包含hello、hihowdy。所以只有一个,而且只有一个条件是真的

有这样做的方法吗?

使用
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