簡體   English   中英

在 JSON 對象的開頭添加新屬性

[英]Add a new property at the beginning of a JSON object

我有這個 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"});

謝謝!

根據定義,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 是否保證對象屬性順序?

無法向 JSON 添加新條目並控制它們的位置。

如果你想處理順序[奇怪,因為對象是無序的],你基本上必須創建一個新對象並附加數據。

Javascript 對象屬性不是確定性排序的。 無論屬性的順序如何,都可以訪問它們。如果您依賴它們在for-in循環中的特定順序,我建議重新考慮您的策略。 不同的瀏覽器將采用不同的方法對屬性進行排序。 雖然許多瀏覽器實際上會按照您創建它們的順序處理它們,但該行為實際上並未在語言規范中定義,因此您不能依賴它。

我認為 unshift 問題可能來自於你是一個關聯數組的事實。 關聯數組的定義

這可能是一個 hack 但如果您必須在 JSON 對象的開頭具有該值,那么如何:

var myNewVar={'5':'Electronics'};
for (xx in myVar) {
    myNewVar[xx]=myVar[xx];
}

這可以使用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' 函數將產生一個全新的對象,它不會改變你傳遞給它的任何一個對象。

只需這樣做:

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"

嘗試這樣的事情:

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")) } );

字符串化和修改

var foo = {a:1,b:2,c:3};
var bar = JSON.stringify(foo);
foo = JSON.parse('{"d":4,' + bar.slice(1));
alert(JSON.stringify(foo));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM