【问题标题】:Finding a specific string in array of strings在字符串数组中查找特定字符串
【发布时间】:2015-08-06 02:50:45
【问题描述】:

在字符串数组中,如果循环发现其中一个字符串不是我们要查找的字符串,则循环返回false

如果它没有找到不匹配的字符串,则数组是正确的,它应该返回true。即使数组没有“错误”,它也会不断返回false

我尝试过使用indexOf,for循环和while循环,都失败了。

function brackets() {
    var testArr = ['()', '{}', '()']

    /* Method 1 --- returns false even when the parenthesis are ok, I guess
    it's because the indexOf only searches for the first element that matches 
    the criteria */

    if (testArr.indexOf("()") == -1 || testArr.indexOf("{}") == -1 ||
        testArr.indexOf("[]") == -1) {
        return false
    } else {
        return true
    }

    /* Method 2 --- for loop. Same story, returns false, even when all   
    testArr[i] === any of the cases and none of them is !==, it behaves as if it was 
    false. I'm not sure why */

    for (i = 0; i < testArr.length; i++) {
        if (testArr[i] !== "()" || testArr[i] !== "{}" || testArr[i] !== "[]") {
            return false
        }
    }
    return true
}

brackets()

【问题讨论】:

  • testArr.indexOf("[]") 显然失败了,因为这是一个逻辑 OR,如果其中任何一个失败,它会返回 false ?

标签: javascript arrays string for-loop indexof


【解决方案1】:

在第二种方法中,您可以使用 AND 运算符来解决此问题。

function brackets() {
var testArr = ['()', '{}', '()'];

/* Method 2 --- for loop. Same story, returns false, even when all   
testArr[i] === any of the cases and none of them is !==, it behaves as if it was 
false. I'm not sure why */

for (i = 0; i < testArr.length; i++) {
    if (testArr[i] !== "()" && testArr[i] !== "{}"  && testArr[i] !== "[]") {
        return false;
    }
}
return true;
}

brackets();

【讨论】:

    【解决方案2】:

    将您的数组更改为:var testArr = ['()', '{}', '[]']

    既然你这样做了

     if (testArr.indexOf("()") == -1 || testArr.indexOf("{}") == -1 ||
            testArr.indexOf("[]") == -1)
    

    那么即使数组中缺少这些括号之一,条件也会返回 false。

    【讨论】:

    • @vsl0610: 但您的示例中的数组显然存在不包含[] 的错误?如果你对“一个不包含错误但仍然返回 false 的数组”有问题,那么你应该提供演示这种情况的代码。
    【解决方案3】:

    你已经创建了一个数组

    var testArr = ['()', '{}', '()']
    

    所以如果你需要测试你需要测试二维数组的字符串

    if (testArr[0].indexOf("()") == -1
    

    【讨论】:

      【解决方案4】:

      应该这样做:

      var testArr = ['()', '{}', '()'];
      
      if(testArr.some(function(e){ return /(){}/g.test(e) })){
         console.log("found");
      } else {
         console.log("not found");   
      }
      

      查找“()”和“{}”的所有实例

      https://jsfiddle.net/dhoh1932/1/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多