0

重複の可能性:
JavaScriptのFor..Inループ-キーと値のペア

この質問のように、配列を順番にループする必要があります。ただし、key名前にアクセスする必要もあります。数値的にインデックス付けされたループにいるときに、どうすればそれを行うことができますか?

for(i=0; i<arr.length; i++){
    alert(arr[i].key); // clearly won't work
}

しかし

for(key in arr){
    alert(arr[key]); // works, but it doesn't loop through in the right order
}
4

2 に答える 2

1

JavaScriptオブジェクトのプロパティを一覧表示して、特定の順序で返されることを期待することはできません。

このブログ投稿を読んで、 forループの順序に関する部分を確認してください。

于 2012-08-07T23:01:14.650 に答える
0

オブジェクトを「並べ替える」場合は、キー名を配列に入れて並べ替えてから、配列内の順序でオブジェクトのプロパティにアクセスします。例:

var obj = { '3':3, '0':0, '2':2, '1':1};
var props = [];

for (var p in obj) {

  if (obj.hasOwnProperty(p)) {
    props.push(p);
  }
}

props.sort();

for (var i=0, iLen=props.length; i<iLen; i++0 {
  alert(obj[props[i]]); // 0, 1, 2, 3
}

オブジェクトプロパティの順序に関して、ES5は次のように述べています。

プロパティを列挙するメカニズムと順序(最初のアルゴリズムのステップ6.a、2番目のアルゴリズムのステップ7.a)は指定されていません。

http://es5.github.com/#x12.6.4

人気のあるライブラリのコメントで、「自分のプロパティが最初に列挙される」というステートメントを見つけることができます。これは、広く使用されている少なくとも1つのブラウザの動作と矛盾するため、無視する必要があります。

于 2012-08-07T23:28:06.047 に答える