以原始顺序迭代jQuery JSON对象

Dou*_*oug 12 javascript jquery json

我在地图对象中有一些json数据,按时间排序.键是整数id,值是包含时间戳的对象.但是,当我尝试使用jQuery $ .each函数迭代这些数据时,结果将按键排序.如何以原始顺序迭代我的对象集合?

代码示例:

$.getJSON(url, addPages);
function addPages(pageData) {
    $.each(pageData, function(key,value){
        alert(key+' : '+value);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 11

对象是无序集.您无法以跨浏览器投诉方式指定订单.没有原始订单的概念,除非它已经按规则排序.

因此,对服务器上的数据进行排序,然后以相同的排序顺序对其进行枚举.

或者将JSON格式化为

{ "values": [
   { "someKey": "someVal" },
   { "someOtherKey": "someOtherVal" }
] }
Run Code Online (Sandbox Code Playgroud)

您可以使用循环迭代数组for (i = 0; i < len; i++)并"garantuee"原始顺序.


Noe*_*ers 6

您可以将键值对复制到对象数组中,然后使用Array.sort将它们按顺序排列.

// $.getJSON(url, addPages); //removed for test purposes
function addPages(pageData) {
    var pageItems = [];
    $.each(pageData, function(key,value){
        pageItems.push( { key: key, value: value } );
    });
    // Assuming you can do arithmetic on timestamps
    pageItems.sort( function(a,b){ return a.value.timeStamp - b.value.timeStamp; } ); 
    $.each(pageItems, function(index,pageItem){
        alert(pageItem.key+' : '+pageItem.value.timeStamp);
    });
}
Run Code Online (Sandbox Code Playgroud)

我的测试脚本:

var testData = { 
  '12': { timeStamp: 55 },
  '16': { timeStamp: 655 },
  '123': { timeStamp: 455 },
  '312': { timeStamp: 955 },
  '132': { timeStamp: 255 },
  '126': { timeStamp: 455 },
  '162': { timeStamp: 355 }
  };
addPages(testData);
Run Code Online (Sandbox Code Playgroud)