Javascript 按原始顺序迭代jQuery JSON对象

Javascript 按原始顺序迭代jQuery JSON对象,javascript,jquery,json,Javascript,Jquery,Json,我在一个map对象中有一些json数据,它是按时间排序的。键是一个整数id,值是一个包含时间戳的对象。但是,当我尝试使用jQuery$对这些数据进行迭代时,每个函数返回的结果都是按键排序的。如何按对象的原始顺序迭代对象集合 代码示例: $.getJSON(url, addPages); function addPages(pageData) { $.each(pageData, function(key,value){ alert(key+' : '+value);

我在一个map对象中有一些json数据,它是按时间排序的。键是一个整数id,值是一个包含时间戳的对象。但是,当我尝试使用jQuery$对这些数据进行迭代时,每个函数返回的结果都是按键排序的。如何按对象的原始顺序迭代对象集合

代码示例:

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

对象是未排序的集合。不能以跨浏览器投诉的方式指定订单。没有原始顺序的概念,除非它已经按照规则进行了排序

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

或者将JSON格式化为

{ "values": [
   { "someKey": "someVal" },
   { "someOtherKey": "someOtherVal" }
] }

您可以使用
循环遍历数组(i=0;i
并按原始顺序“garantuee”

如果“original”指的是对象中的时间戳,我认为除了先显式排序数组,然后循环遍历数组之外,没有任何简单的选择。

在firefox对象中保持顺序。。在铬合金中,它们没有。不知道其他浏览器,但两种不同的实现已经表明您不能依赖它

如果您需要订购的东西,请使用列表;如果您需要同时具有非数字键和特定顺序的内容,最简单的方法是使用[key,value]列表:

[['abd', 'def'], ['ghi', 'jkl']]

您可以将键值对复制到对象数组中,然后使用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);
    });
}
我的测试脚本:

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);

以下是关于Chrome中问题的链接:有什么理由更喜欢[k,v]元组而不是{k:v}对象吗?@FelixKing这与其说是一个问题,不如说是实现中的一个漏洞。所有这些都是有效的,只是不一致。@Raynos:
var x={somekey:'somevalue'}-如何在不知情的情况下轻松访问密钥?;)实际上,我使用了类似于您发布的内容,但是您的代码片段中充满了语法错误。顺便说一句,对于语法错误,我感到抱歉-我现在已经修复了它。(我归咎于深夜和最近接触Ruby)