7

私はこのJSONを持っています:

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

最初に新しい要素を追加したいのですが、最終的には次のようになります。

var myVar = {
     "5":"Electronics",
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

私はこれを試しましたが、機能していません:

myVar.unshift({"5":"Electronics"});

ありがとう!

4

8 に答える 8

14

Javascript オブジェクトには定義上、順序が関連付けられていないため、これは不可能です。

注文が必要な場合は、オブジェクトの配列を使用する必要があります。

var myArray = [
    {number: '9', value:'Automotive & Industrial'},
    {number: '1', value:'Books'},
    {number: '7', value:'Clothing'}
]

最初の位置に何かを挿入したい場合は、Arrays の unshift メソッドを使用できます。

myArray.unshift({number:'5', value:'Electronics'})

//myArray is now the following
[{number:'5', value:'Electronics'},
 {number: '9', value:'Automotive & Industrial'},
 {number: '1', value:'Books'},
 {number: '7', value:'Clothing'}]

詳細はこちら: JavaScript はオブジェクト プロパティの順序を保証しますか?

于 2012-05-21T19:46:40.800 に答える
2

JSON に新しいエントリを追加して、それらの位置を制御する方法はありません。

順序を処理したい場合 [オブジェクトは順序付けされていないため奇妙です]、基本的に新しいオブジェクトを作成してデータを追加する必要があります。

于 2012-05-21T19:33:44.707 に答える
2

Javascript オブジェクトのプロパティは決定論的に順序付けられていません。プロパティは、その順序に関係なくアクセスできます。ループの特定の順序に依存している場合はfor-in、戦略を再考することをお勧めします。ブラウザが異なれば、プロパティの順序付けの方法も異なります。実際、多くのブラウザーは作成した順序でそれらを処理しますが、その動作は実際には言語仕様で定義されていないため、信頼することはできません。

于 2012-05-21T19:33:52.350 に答える
2

アンシフトの問題は、連想配列であるという事実に起因する可能性があると思います。 連想配列の定義

これはハックかもしれませんが、JSON オブジェクトの先頭にその値が必要な場合は、次のようにします。

var myNewVar={'5':'Electronics'};
for (xx in myVar) {
    myNewVar[xx]=myVar[xx];
}
于 2012-05-21T20:14:47.917 に答える
2

これは、次のようにlodashマージ関数を使用して実行できます。

var myObj = _.merge({ col1: 'col 1', col2: 'col 2'}, { col3: 'col 3', col4: 'col 4' });

最終的なオブジェクトは次のようになります。

{ col1: 'col 1', col2: 'col 2', col3: 'col 3', col4: 'col 4' }

他の人が述べたように、オブジェクトの操作によっては、オブジェクト内のキーの順序が同じままであるという保証はありません。ただし、最後のステップとしてマージを実行する場合は、問題ありません。'merge' 関数は完全に新しいオブジェクトを生成することに注意してください。渡されたオブジェクトはどちらも変更されません。

于 2014-09-24T23:22:25.770 に答える
0

このようにしてください:

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

// if you want to add a property, then...

myVar["5"]="Electronics"; // note that it won't be "first" or "last", it's just "5"
于 2012-05-21T19:37:27.963 に答える
0

そのようなことを試してください:

myObject.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );

また

myObject.sort(function(a,b) { return parseFloat(a.get("price")) - parseFloat(b.get("price")) } );
于 2012-10-11T08:02:18.643 に答える