1

私は宿題に取り組んでいます。これが私の問題と試みられた解決策です。

文字列 "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

4 に答える 4

4

同じ文字列に対して単一の引数で呼び出された場合、indexOf()毎回同じインデックスを返し続けます。

の最初の引数indexOf()は、一致する部分文字列です。2 番目のオプションの引数は、検索フォームを開始するインデックスです。この引数を渡さない限り、各反復間で結果は変わりません。

iまた、ループに値と等しい反復子が必要であると想定するのも正しくありませんlastIndexOf()。これは、一致の数が一致するインデックスの値と確実に等しくないため、ループが多くの冗長な反復を実行するだけです (文字列が文字のみで構成されている場合を除くe)。つまり、 index に一致するものが 1 つしかない場合24でも、ループは理由もなく 23 回繰り返されます。

于 2013-10-04T16:05:01.813 に答える
2

より良い解決策は次のようなものかもしれません:

var lastIndex = tx_val.indexOf('e');
while (lastIndex > -1) {
    os += lastIndex + " ";
    lastIndex = tx_val.indexOf('e',lastIndex + 1);
}
于 2013-10-04T16:08:53.550 に答える
1

他の人が既に解決策を提供しています ( の 2 番目のパラメーターindexOf)。

この行はここに置いておきます

tx_val.replace(/e/g, function(str, i) {os = os + ' ' + i});
于 2013-10-04T16:36:06.373 に答える
0

文字列を個々の文字の配列に分割しようとすると、それを解析し、一致するインデックスを別の (出力) 配列に格納することになるでしょうか?

于 2013-10-04T16:12:52.333 に答える