私は配列を持っています:
var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1
キーでソートされたオブジェクトのすべての要素を取得する方法(番号順?)
for ( key in arr ) {
alert(typeof(key))
}
文字列型を返します。
私は配列を持っています:
var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1
キーでソートされたオブジェクトのすべての要素を取得する方法(番号順?)
for ( key in arr ) {
alert(typeof(key))
}
文字列型を返します。
これは連想配列ではなく、オブジェクトです。javascriptには連想配列はありません。
さらに、オブジェクトは順序付けられていません。オブジェクト内のキーの順序は無意味です。
そもそも配列を使用しない何らかの理由があると仮定すると、列挙可能なオブジェクト プロパティの配列を取得し、その配列を並べ替えることができます...
var sorted = Object.keys(my_obj)
.sort(function(a,b) {
return a - b;
});
これは、キーが数値であることを前提としています。
次に、配列を反復し、各キーを使用して値を取得できますmy_obj
...
sorted.forEach(function(key) {
console.log(my_obj[key]);
});
短い答え: できません。
長い答え: JavaScript の連想配列は、実際には JavaScript オブジェクトです。新しい要素を追加すると、実際には新しいメンバーがオブジェクトに追加されます。ほとんどのブラウザーは追加された順序でこれらのメンバーを列挙しますが、標準では順序は定義されていないと述べています。未定義のものはソートできません。
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]]
}