2013-11-14 248 views
0

如何通過按鍵按字母順序排序此對象?按鍵排序關聯數組/ javascript對象按字母順序排序

我嘗試:

racks.sort(); 

目的機架填充這樣的:

(Statdev是一個字符串,和kartnr和bitnrk是整數)

racks[jPunten[i].STATDEV] = { 
          label: '', 
          punkt: [{ 
          x: jPunten[i].KARTNR, 
          y: jPunten[i].BITNRK}] 

一些螢火蟲輸出(我還注意到,在螢火蟲中,物體是按字母順序排列的):

racks 
    [] 

DAY 
    Object { punkt=[8], label=""} 

label 
    "" 

punkt 
    [Object { x="12", y="1"}, Object { x="12", y="2"}, Object { x="12", y="3"}, 5 meer...] 

0 
    Object { x="12", y="1"} 

1 
    Object { x="12", y="2"} 

2 
    Object { x="12", y="3"} 

3 
    Object { x="12", y="4"} 

4 
    Object { x="12", y="5"} 

5 
    Object { x="12", y="6"} 

6 
    Object { x="12", y="7"} 

7 
    Object { x="12", y="8"} 

LSF01 
    Object { punkt=[1], label=""} 

label 
    "" 

punkt 
    [Object { x="1", y="10"}] 

0 
    Object { x="1", y="10"} 

x 
    "1" 

y 
    "10" 
+0

JavaScript對象中沒有內在的順序。如果您需要可靠的排序,請創建一個鍵數組並對其進行排序。 – Sirko

+0

您無法對對象進行排序。它們按鍵名自動排序(大多數情況下)。 –

回答

1

在JavaScript中無法通過鍵排序對象屬性。如果你需要它,你可以把數組的所有鍵,排序它們,然後按照期望的順序處理屬性。

1

嘗試這種情況:

sort = function(obj, comparator) { 
    var array = []; 
    for (var i in obj) { 
     array.push([obj[i], i]); 
    } 
    array.sort(function(o1, o2) { 
     return comparator(o1[0], o2[0]); 
    }); 
    var newObj = {}; 
    for (var i = 0; i < array.length; i++) { 
     newObj[array[i][1]] = array[i][0]; 
    } 
    return newObj; 
} 
+0

什麼是比較器?你能給個例子嗎? – Rubicksman

0

執行兩個數組:

  • 一個陣列用於鍵
  • 第二關聯數組,使用密鑰 值對,其實是一個對象。

//正常的對象符號

var personObject = {firstName:"John", lastName:"Doe"}; 
alert('personObject.firstName - ' + personObject.firstName); 

//添加使用對象的數組符號,注反對:這樣做將數組轉換爲對象

personObject["age"] = 46; 

//數組按鍵排序

var keysArray = ["firstName", "lastName"]; 
keysArray[keysArray.length] = "age"; 
keysArray.sort(); 

//獲取對象值,使用以數組爲鍵的數組 - 對象表示法

alert('personObject[keysArray[0]] - ' + personObject[keysArray[0]]);