如果任何元素为真,如何遍历任何数组以返回值“ true”

时间:2019-04-10 16:31:26

标签: javascript

这个问题与JavaScript有关。 如果输入是以下任何一个数组“ hello,hi,yo或hey”,则我希望该值返回true,但只返回false。

我尝试了多种方法,例如toString(),includes()等。

function myFunction() {
  var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
  var b = document.getElementById("input1").value;
  for (i = 0; i < arr1.length; i++) {
    var greeting1 = arr1[i].test(b);
    greeting1.toString()
    document.getElementById("demo").innerHTML = greeting1
  }
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>

我希望该值返回true。

2 个答案:

答案 0 :(得分:3)

您可以使用Array.prototype.some()来检查至少一个正则表达式是否匹配。我对您的代码做了一些修改,仅举一个例子:

function myFunction(value) {
    var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
    console.log(arr1.some(a => a.test(value)));        
}

myFunction('hello');

您的代码中的问题是您要用for循环的每次迭代结果覆盖文本。

答案 1 :(得分:2)

一种解决方案是一旦正则表达式break返回test(),就进行true循环:

function myFunction()
{
    var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
    var b = document.getElementById("input1").value;
    var res = false;

    for (i = 0; i < arr1.length; i++)
    {
        res = arr1[i].test(b);

        if (res)
            break;
    }

    document.getElementById("demo").innerHTML = res;
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>

但是,您可以使用Array.some()来简化代码:

function myFunction() {
  var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
  var b = document.getElementById("input1").value;
  document.getElementById("demo").innerHTML = arr1.some(regexp => regexp.test(b));
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>