2

列に並んでいる人の名前と実際のインデックスを出力する関数を作成しました。

var line = ["Sarah", "Mike", "Bob"];

function currentLine(line) {
  if (line.length === 0) {
    document.write(`The line is currently empty.`);
  } else {

    var array = [];
    for (var i = 0; i < line.length; i++) {
      array.push(` ${line.indexOf(line[i+1])}. ${line[i]}`);
    }
    document.write(`The line is currently:` + array);
  }
}

currentLine(line);

関数を実行すると、出力は次のようになります。

The line is currently: 1. Sarah, 2. Mike, -1. Bob

JavaScript エンジンはループをどのように解釈していますか? ボブ -1 はどうですか? 前回は 2 + 1 = 3 でした。

これを自分で修正したいのですが、この一見単純なループで何が起こっているのかを理解しようとしています。

4

3 に答える 3

2

答えはあなたの分析で正しいです:

ボブ -1 はどうですか? 前回確認したのは 2 + 1 = 3

ループの 3 回目の反復では、i = 2 です。この行は i = 2 で実行されます。

line.indexOf(line[i+1])

それで、これは何を言いますか?(i + 1)位置 3 の要素、つまり 4番目の要素を取得してくださいと表示されます。4 番目の要素はありませline[i+1]undefined

それを呼び出しに渡すと、indexOfあなたが言っていることは、配列 undefined内の位置を見つけてください。「サラ」、「マイク」、「ボブ」が含まれています。は含まれていません。linelineundefined

行に小さな変更を加えたところ、array.push正しく動作するようになりました:

var line = ["Sarah", "Mike", "Bob"];

function currentLine(line) {
  if (line.length === 0) {
    document.write(`The line is currently empty.`);
  } else {

    var array = [];
    for (var i = 0; i < line.length; i++) {
      array.push(` ${i+1}. ${line[i]}`);
    }
    document.write(`The line is currently:` + array);
  }
}

currentLine(line);
于 2016-09-04T03:56:06.797 に答える
1

の問題${line.indexOf(line[i+1])}は、最後の反復でiが 2 であることがチェックされることですline[3]indexOfそれは存在しないので、何かが存在しない場合の戻り値である -1 を吐き出します。これで行くだけです:

array.push(` ${i+1}. ${line[i]}`);

これiは、インデックスを探す代わりに + 1 を出力するだけです。

var line = ["Sarah", "Mike", "Bob"];

function currentLine(line) {
  if (line.length === 0) {
    document.write(`The line is currently empty.`);
  } else {
    var array = [];
    for (var i = 0; i < line.length; i++) {
      console.log(line.indexOf(line[i+1])); //On last iteration, it's -1 because it's not found in the array!
      array.push(` ${i+1}. ${line[i]}`);
    }
    document.write(`The line is currently:` + array);
  }
}

currentLine(line);

于 2016-09-04T03:56:54.047 に答える
0

ループを修正しました。私は索引付けを過度に複雑にしました:

${line.indexOf(line[i+1])}

次のようになります。

${[i+1]}- それは正当な構文ですか?

また、誰かが私の間違ったコードが何をしていたのか、そして JS がどのように反復していたのかを明らかにすることができれば、私はそれを大いに感謝します.

于 2016-09-04T03:53:35.193 に答える