Fruit={4:"apple",2:"banana",3:"graps"};
var k;
for(k in Fruit)
{alert(k);}
アラートはIE8 & FFで他の&はこのうち私を助け4 2 3
を与える閲覧IE9のシーケンスで2 3 4
になります。シーケンスが必要です4 2 3
IE9連想配列
Fruit={4:"apple",2:"banana",3:"graps"};
var k;
for(k in Fruit)
{alert(k);}
アラートはIE8 & FFで他の&はこのうち私を助け4 2 3
を与える閲覧IE9のシーケンスで2 3 4
になります。シーケンスが必要です4 2 3
IE9連想配列
JavaScriptのオブジェクトからキーが出る順序を制御することはできません。あなたは順序を気にする場合は、別の配列にキーを入れて:
var fruit = { 4:"apple", 2:"banana", 3:"grapes" };
var fruitKeys = [ 4, 2, 3 ]
for (var i=0, l=fruitKeys.length; i<l; ++i) {
var k = fruitKeys[i];
alert(k + ":" + fruit[k]);
}
(スタイルのポイントとして、あなたはまた、変数名を大文字にすべきではありません。あなただけはコンストラクタとして使用している機能のために大文字を使用します/"クラス")。ここでIE9の行動が間違っていないので
連想配列は、順序を持っていません。このように注文を格納できる既存のデータ型はありません。あなたの最善の策は、明示的に順序を保存するために、次のようになります。javascriptのオブジェクトが発注されていないことは明らかであろう他の回答から
var Fruit = [[4, "apple"], [2, "banana"], [3, "graps"]];
for (var i = 0; i < Fruit.length; i++) {
alert(Fruit[i][0]);
}
。一部のブラウザでは、Object.keys
を使用して並べ替えを行うことができます。たとえば:
function objSortedList(obj){
var keys = Object.keys(obj).sort(), key;
while(key = keys.shift()){
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps"};
objSortedList(fruit);
/* =>result:
2: banana
3: graps
4: apple
*/
あなたが事前に定義された順序を維持したい場合は、あなたが同じ少し変化した機能を使用できます。
function objSortedList(obj,keys){
keys = keys || Object.keys(obj).sort()
var key;
while(key = keys.shift()){
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps"};
objSortedList(fruit,[4,2,3]);
/* =>result:
4: apple
2: banana
3: graps
*/
もう一つのアイデアは、オブジェクトのプロパティとして順序を保存することであってもよいし、それを使用します。Object.keys
Mozillaがshim hereを提供していますサポートしていないブラウザのために
function objSortedList(obj,keys){
keys = keys
|| (obj.order ? obj.order.slice() : false)
|| Object.keys(obj).sort()
var key;
while(key = keys.shift()){
if (/^order$/.test(key)){ continue; }
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps",order:[4,3,2]};
objSortedList(fruit);
/* =>result:
4: apple
3: graps
2: banana
*/
。 IE9はそれをサポートしています。
しかし、OPが望んでいるのは明示的に*並べ替えられた注文ではなく、挿入注文です。 –
はい、答えを編集しました – KooiInc
こんにちは。ありがとう2すべての解決策を見つけた2人。私は自分の必要に応じてより正確な答えが必要です。私の配列は、別のファイルと別のファイルのjavascriptコードから来ています。動的に設定された配列は、同じ名前の配列が複数あることを意味します。fruit = {4: "apple"、2: "banana"、3: "graps"}; fruit = {4: "apple"、3: "graps"}; fruit = {2: "apple"、3: "graps"};だから私は配列に私にjavascriptで動作する任意のソリューションを与える余分なパラメータを追加することはできません。 –
1)asker has added criteria to his questionと2)の理由から、この回答は本質的にマークリードの修正版です。
もう1つのアプローチ(Mark Reed's answerの修正版)はスパース配列を使用することです。スパース配列は、その長さ内のすべてのインデックスに要素を持たない配列です。我々はマークのコードを取るが、連想配列にfruit
を変換する場合、それは次のようになります。
var fruit = new Array();
fruit[2] = "banana";
fruit[3] = "graps";
fruit[4] = "apple";
// The rest of the solution is the same as Mark's:
var fruitKeys = [ 4, 2, 3 ]
for (var i=0, l=fruitKeys.length; i<l; ++i) {
var k = fruitKeys[i];
alert(k + ":" + fruit[k]);
}
チェックこの[フィドル](http://jsfiddle.net/pABaQ/) - Chromeはまた、 '2 3 4ありません' –
は順番に実装されています。 http://stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop、ソートが必要になるhttp://stackoverflow.com/questions/5467129/sort-javascript-object-by -key –