0

私はオブジェクトのリスト(data)を持っています、私はこれをしています:

for (var i = 0; data.length < i; i++) {...}

しかし、それは機能しません。私がこれを使うとき:

for (var i in data) {

動作しますが、オブジェクトが1つしかない場合、この場合i0(correct)、indexOfObject(wtf)、removeItem(wtf)のように3回ループしています。

最初の式が機能しないのはなぜですか?これらの2つの奇妙iな値は何ですか?私は何か間違ったことをしていますか?

編集:これは少し複雑なので、私ができる最善のことは、データオブジェクトのスクリーンショットを提供することです:screenshot

4

3 に答える 3

4

ループステートメントを確認してください。forループ(data.length < i)の条件は逆であり、おそらく満たされない可能性があります。

そのはず:

   for (var i = 0; i < data.length;  i++)
   {
      // Now write your code 
   }
于 2013-03-24T19:20:21.713 に答える
1

本当にアレイがある場合—

var a = ["hello", "world"];

また

var a = new Array();
a[0] = "hello";
a[1] = "world";

次に、最初のループ(インデックス変数を使用)が正しいです。inオブジェクトのプロパティを反復処理するにはスタイルループを使用する必要forがありますが、配列の数値的にインデックス付けされたプロパティにはインデックス付きスタイルを使用します。

編集—おっと@Sachinを呼び出します-forループテストは逆方向です。

プレーンオブジェクトがあり、そのプロパティを反復処理したいが、オブジェクトのプロトタイプチェーンで見つかったプロパティをスキップしたい場合は、次のようにすることができます。

for (var name in obj) {
  if (obj.hasOwnProperty(name)) {
    var value = obj[name];
    // do stuff
  }
}
于 2013-03-24T19:20:08.710 に答える
0

上記のコードから、forループ内で間違った条件を指定していることがわかります。まず、変数iを0に初期化し、次にdata.length<0をチェックします。長さの値をゼロ未満にすることはできますか?

あなたはそれを次のように使うことができます:-

  for (var i = 0; i<data.length; i++) {...}

それがうまくいくことを試してみてください。

于 2013-03-24T19:24:43.197 に答える