【问题标题】:Can somebody explain the logic of .indexOf() in Javascript?有人可以解释 .indexOf() 在 Javascript 中的逻辑吗?
【发布时间】:2020-05-02 04:56:26
【问题描述】:
function vowelsAndConsonants(s) {
    var vowels = ['a','e','i','o','u'];

    for(let i =0; i<s.length; i++){
        if(vowels.indexOf(s[i]) > -1 ){
            console.log(s[i]);
        }
    }

    for(let j = 0; j<s.length; j++){
      if(vowels.indexOf(s[j]) < 0){
          console.log(s[j]);
      }
    }
}

上面的代码打印出输入的元音和辅音。

我很难理解 .indexOf() 在这种情况下具体是如何工作的。

我知道.indexOf() 搜索数组并返回您要查找的元素的位置,但为什么下面的条件if(vowels.indexOf(s[i]) &gt; -1) 只返回元音?

  • 据我了解,如果.indexOf() 返回 -1,则表示没有 找到了匹配。在这种情况下,if(vowels.indexOf(s[i]) &gt; -1) 意味着如果找到匹配项,我们应该执行代码,因为它大于 -1?
  • 同样,在这种情况下,if(vowels.indexOf(s[j]) &lt; 0) 将意味着 如果找不到匹配项,则执行 if 中的任何内容 声明。

有人可以解释一下逻辑并举一个简单的例子吗?我想我明白了逻辑,但同时我认为我没有。

【问题讨论】:

  • 是的,你是对的。它返回数组中元素的第一个索引,如果未找到则返回 -1。 docs中的完整详细信息和示例
  • > -1 与 >= 0 相同,即元音的索引。

标签: javascript arrays indexof


【解决方案1】:

indexOf 函数在元音数组中搜索。

如果它找到一个值,它将返回它的索引,因此结果将大于-1。

如果没有找到,结果将是-1。

但最好使用
if(vowels.indexOf(s[j]) === -1) 而不是
if(vowels.indexOf(s[j]) &lt; 0)

【讨论】:

  • 为什么第一个例子比第二个好?
  • 你永远不会得到像 -2, -3 这样的值......唯一可能的情况是 -1 没有匹配,所以最好更准确。
【解决方案2】:

除非您实际上还需要知道 indexOf 结果才能对其进行处理,否则在现代 JS 中,最好使用 .includes() 而不是针对 -1 或 0 进行测试。

.includes() 更清晰

【讨论】:

  • 谢谢!我试图使用 contains(),但它失败了,因为它不适用于数组。
猜你喜欢
  • 2013-07-13
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多