2013-11-26 114 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>"); 
}); 

瞧的!