如何在字符串中显示每次出现char的位置?

时间:2013-10-04 16:00:25

标签: javascript indexof

我正在做家庭作业。这是我的问题和尝试的解决方案。

  

在字符串“tx_val”中显示字符“e”的每个出现位置

    tx_val="the quick brown fox jumped over the lazy dogs back";

    os=' ';  //output string
    eloc=' '; 

    for (i=0; i<tx_val.lastIndexOf('e');i++)
     {
    if(tx_val.indexOf('e')!= -1)
        {

            eloc=tx_val.indexOf('e') ; 
            os=os+eloc;
            i++;
        }   

      }         

我的预期结果:2 24 29 34

我的结果:2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

我不是在寻找答案,而是为了解释为什么我的逻辑不起作用并指出我正确的方向。

4 个答案:

答案 0 :(得分:4)

当在同一个字符串上使用单个参数调用时,indexOf()将每次都返回相同的索引。

indexOf()的第一个参数是要匹配的子字符串。第二个可选参数是启动搜索表单的索引。除非您传递此参数,否则结果不会在每次迭代之间发生变化。

假设循环应该具有等于i值的lastIndexOf()迭代器,这也是不正确的。这只会使循环运行许多冗余迭代,因为匹配数肯定不等于匹配索引的值(除非字符串仅由e个字符组成)。换句话说,如果索引24中只有一个匹配,那么循环仍会无缘无故地重复23次。

答案 1 :(得分:2)

更好的解决方案可能是这样的:

var lastIndex = tx_val.indexOf('e');
while (lastIndex > -1) {
    os += lastIndex + " ";
    lastIndex = tx_val.indexOf('e',lastIndex + 1);
}

答案 2 :(得分:1)

其他人已经提供了解决方案(indexOf的第二个参数)。

我会在这里留下这一行

tx_val.replace(/e/g, function(str, i) {os = os + ' ' + i});

答案 3 :(得分:0)

如果您尝试将字符串拆分为单个字符数组,解析它并将匹配的索引存储在另一个(输出)数组中会怎样?