1

重複の可能性:
JavaScriptオブジェクトの
並べ替えJavaScriptオブジェクトをキーで並べ替える

私は配列を持っています:

var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1

キーでソートされたオブジェクトのすべての要素を取得する方法(番号順?)

for ( key in arr ) {
     alert(typeof(key))
}

文字列型を返します。

4

4 に答える 4

1

これは連想配列ではなく、オブジェクトです。javascriptには連想配列はありません。

さらに、オブジェクトは順序付けられていません。オブジェクト内のキーの順序は無意味です。

于 2012-08-03T14:21:39.997 に答える
1

そもそも配列を使用しない何らかの理由があると仮定すると、列挙可能なオブジェクト プロパティの配列を取得し、その配列を並べ替えることができます...

var sorted = Object.keys(my_obj)
                   .sort(function(a,b) {
                            return a - b;
                         });

これは、キーが数値であることを前提としています。

次に、配列を反復し、各キーを使用して値を取得できますmy_obj...

sorted.forEach(function(key) {
                   console.log(my_obj[key]);
               });
于 2012-08-03T14:22:54.660 に答える
1

短い答え: できません。

長い答え: JavaScript の連想配列は、実際には JavaScript オブジェクトです。新しい要素を追加すると、実際には新しいメンバーがオブジェクトに追加されます。ほとんどのブラウザーは追加された順序でこれらのメンバーを列挙しますが、標準では順序は定義されていないと述べています。未定義のものはソートできません。

于 2012-08-03T14:23:30.023 に答える
1

JavaScript オブジェクト (マップ/辞書/連想配列) には順序がなく、並べ替えることができません。最初に配列に変換する必要があります。ループ内のオブジェクトのキーのみが必要なため、Object.keys()関数(古いブラウザーではシムが必要になる可能性があります) はタスクに向けられています。

var obj = {...};
var keys = Object.keys(obj).sort(function(a,b){return a-b;}); // numerically sorted
for (var i=0; i<keys.length; i++) {
    alert(keys[i]);
    // access the values by obj[keys[i]]
}
于 2012-08-03T14:23:56.610 に答える