2011-08-05 51 views
5
var addObjectResponse = [{ 
    'DateTimeTaken': '/Date(1301494335000-0400)/', 
    'Weight': 100909.090909091, 
    'Height': 182.88, 
    'SPO2': '222.00000', 
    'BloodPressureSystolic': 120, 
    'BloodPressureDiastolic': 80, 
    'BloodPressurePosition': 'Standing', 
    'VitalSite': 'Popliteal', 
    'Laterality': 'Right', 
    'CuffSize': 'XL', 
    'HeartRate': 111, 
    'HeartRateRegularity': 'Regular', 
    'Resprate': 111,  
    'Temperature': 36.6666666666667, 
    'TemperatureMethod': 'Oral',  
    'HeadCircumference': '',  
}]; 

這是我從後端得到的示例對象,現在我想要更改對象的順序。我不想按名稱或大小排序...我只是想手動更改訂單...更改對象鍵的順序....

+0

你會收到一條錯誤與響應,因爲 'HeadCircumference' :'',不應該有額外的逗號 –

+3

你想改變鍵/值對的順序嗎?爲什麼? – alnorth29

+0

[元素順序 - for(... in ...)循環中javascript]的可能重複(http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript) –

回答

0

如果你想手動重新排序。只需創建新對象並使用舊對象分配值即可。

var newObject= [{ 
    'DateTimeTaken': addObjectResponse.DateTimeTaken, 
    'Weight': addObjectResponse.Weight, 
    'Height': addObjectResponse.Height, 
    'SPO2': addObjectResponse.SPO2 
}]; 
+11

沒有比原始對象更多的順序。對象屬性在JavaScript中沒有一致的枚舉順序。 –

+3

可能有一個用例需要這樣做,比如用模板庫來渲染對象 – amigolargo

1

我認爲這在JavaScript中不可行。

您可以創建一個數組,其中包含您的順序中的字段名稱,您可以遍歷此數組並從實際對象中獲取字段。

+0

Istvan:我這樣做了,但現在這個值正在以不同的順序被替換... –

+0

@John:我不明白你的評論。 –

9

您無法訂購JavaScript對象鍵/值對。它存儲在它自己的內部格式中,所以你不應該依賴它的順序。在JS中,一切都是一個對象,甚至是一個數組。在JavaScript對象的

aKeys = [ 
    addObjectResponse[0].DateTimeTaken, 
    addObjectResponse[0].Weight, 
    addObjectResponse[0].Height, 
    ...etc... 
] 
+2

雖然這是真的,但它並不像真實世界的用法,其中模板通常通過循環對象屬性來呈現。當你循環他們時,他們有一個命令。改變這個順序是脆弱的,但IMO應該添加它。 – ProblemsOfSumit

0

只是參考對象鍵的順序時引入錯誤訂單。在某些瀏覽器中似乎有一個命令,但ECMAScript規範將對象屬性枚舉順序定義爲特定於實現,因此您不應該假設一個瀏覽器的行爲將與另一個瀏覽器的行爲相同。例如,Chrome不使用與其他某些瀏覽器相同的順序:請參閱this lengthy bug report至少儘可能多地討論此問題,因爲您可能需要。

如果您需要特定順序,請使用數組或兩個數組(一個用於鍵,另一個用於值)。

5

屬性沒有:所以有時你可以在你喜歡使用數組符號和對象符號一起(for x in var

5

我寫這個算法,它允許移動鍵,它是如jQuery .insertAfter()方法。你必須提供:

//currentKey: the key you want to move 
//afterKey: position to move-after the currentKey, null or '' if it must be in position [0] 
//obj: object 


function moveObjectElement(currentKey, afterKey, obj) { 
    var result = {}; 
    var val = obj[currentKey]; 
    delete obj[currentKey]; 
    var next = -1; 
    var i = 0; 
    if(typeof afterKey == 'undefined' || afterKey == null) afterKey = ''; 
    $.each(obj, function(k, v) { 
     if((afterKey == '' && i == 0) || next == 1) { 
      result[currentKey] = val; 
      next = 0; 
     } 
     if(k == afterKey) { next = 1; } 
     result[k] = v; 
     ++i; 
    }); 
    if(next == 1) { 
     result[currentKey] = val; 
    } 
    if(next !== -1) return result; else return obj; 
} 

例子:

var el = {a: 1, b: 3, c:8, d:2 } 
el = moveObjectElement('d', '', el); // {d,a,b,c} 
el = moveObjectElement('b', 'd', el); // {d,b,a,c} 
+0

我喜歡使不可能的事情成爲可能的人。 – ar2015

4

您可以使用Object.keys():

var obj = { 
    a: 1, 
    b: 2, 
    c: 4 
}; 

var new_obj = {}; 

Object.keys(obj) 
.sort(function(a, b) { 
    /** Insert your custom sorting function here */ 
    return a - b; 
}) 
.forEach(function(key) { 
    new_obj[key] = obj[key]; 
}); 

obj = new_obj;