2013-11-26 159 views
1

我想通過使用嵌套在其中的整數值來訂購JSON對象。我所採取的方法是儘可能地使輸入的數據儘可能可讀。我創建了一個新的JSON對象:從數組順序排序對象

var newDataFormat = {"route": route, "destination": destination, "countdown": countdown}; 

busJSON.push(newDataFormat); 

然後我創建一個數組作爲排序機制。其中由數採取「倒計時」的整數,然後排序:

for (var i = totalStops - 1; i >= 0; i--) { 

    countdownArray.push(parseInt(busJSON[i].countdown)); 

} 

countdownArray.sort(function(a,b){return a - b}); 

一旦我有這些,我還有最後一個循環,到信息推送瀏覽器:

for (var i = dataMin; i < dataMax; i++) { 

    if (countdownArray[i] === i) { 

     items.push("<tr><td>" + busJSON[i].route + "</td><td>" + busJSON[i].destination + "</td><td>" + busJSON[i].countdown + "</td></tr>"); 

    } 

} 

問題看來,它並不完全推所有項目的瀏覽器,這是我做的這裏演示:

http://tfl.applied-espi.com/bus-popup/

是否有一個更正確的/高效的我應道這樣做?

+0

你能發佈一個完整的json字符串的例子嗎? – Johan

+1

技術上,對象屬性沒有順序(至少在ECMAScript中)。無論如何,你需要保持關鍵的關聯,它看起來像你失去了推倒計時... http://stackoverflow.com/questions/3824392/javascript-natural-sort-array-object-and-maintain-指數關聯 – zamnuts

回答

1

數組也是一個有效的JSON格式,所以你可以有

var busJSON = []; 

然後你把一些對象,並希望通過將對象

busJSON.push({"route": route, "destination": destination, "countdown": countdown}); 

這樣的成員對它們進行排序你現在有一個對象數組,因爲我們知道一個數組可以被排序,所以我們按倒計數值對它排序

busJSON.sort(function(a,b){return a.countdown - b.countdown}); 

現在我們已經按升序排序的對象,所以我們做一些動作對每一個單元陣列

busJSON.forEach(function(value) { 
    items.push("<tr><td>" + value.route + 
       "</td><td>" + value.destination + 
       "</td><td>" + value.countdown + "</td></tr>"); 
}); 

瞧的!