Javascript 如何按顺序(而不是索引)迭代类似数组的对象?

Javascript 如何按顺序(而不是索引)迭代类似数组的对象?,javascript,jquery,Javascript,Jquery,我有一些JSON数据: { "113":{"id":"113","title":"Coal","hex":"4f4f4f"}, "116":{"id":"116","title":"White","hex":"fdfbf7"}, "115":{"id":"115","title":"Greylead","hex":"b3b3b3"} } 在数据属性的标记中,我可以这样访问: var arr = $("#element).data('arr'); 然后对每一项都做些事情。像这样

我有一些JSON数据:

{  
  "113":{"id":"113","title":"Coal","hex":"4f4f4f"},
  "116":{"id":"116","title":"White","hex":"fdfbf7"},
  "115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
}
在数据属性的标记中,我可以这样访问:

var arr = $("#element).data('arr');
然后对每一项都做些事情。像这样:

$.each( arr, function( index, obj ){ 
   console.log( obj.title + ' is #' + obj.hex );
}
但是数据中项目的顺序没有被保留

$。每个似乎按数据中每个项目的前导编号进行迭代,而不是项目在数组中的实际顺序。我以数字顺序113、115、116获得输出,而不是数据项的实际顺序113、116、115


如何迭代实际订单中的项目?

如果订单对您很重要,请使用普通数组:

[
    {"key": "113", "id":"113","title":"Coal","hex":"4f4f4f"}, 
    {"key": "116", "id":"116","title":"White","hex":"fdfbf7"}, 
    {"key": "115", "id":"115","title":"Greylead","hex":"b3b3b3"}
]
然后是普通循环:

for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    console.log( obj.title + ' is #' + obj.hex );
}

.

如果顺序对您很重要,请使用普通数组:

[
    {"key": "113", "id":"113","title":"Coal","hex":"4f4f4f"}, 
    {"key": "116", "id":"116","title":"White","hex":"fdfbf7"}, 
    {"key": "115", "id":"115","title":"Greylead","hex":"b3b3b3"}
]
然后是普通循环:

for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    console.log( obj.title + ' is #' + obj.hex );
}
.

只需访问此站点并粘贴此

   {  
    "113":{"id":"113","title":"Coal","hex":"4f4f4f"},
    "116":{"id":"116","title":"White","hex":"fdfbf7"},
    "115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
   }
我想你会在JSON.parse维护顺序和eval+data+维护索引的地方得到答案。然后运行一个简单的循环并完成你的其他工作。

只要到这个站点粘贴这个

   {  
    "113":{"id":"113","title":"Coal","hex":"4f4f4f"},
    "116":{"id":"116","title":"White","hex":"fdfbf7"},
    "115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
   }

我想你会在JSON.parse维护顺序和eval+data+维护索引的地方得到答案。然后运行一个简单的循环并完成其他工作。

我如何按实际顺序迭代项目?-没有实际订单。JS对象键在概念上是无序的。在无序的数据结构中,实际的顺序是什么?@fabriciomatté-概念上是无序的。所以这只是JS和PHP之间的一个根本区别?@Dominic我在概念上说,因为没有关于对象键顺序的规范,尽管浏览器倾向于遵循一些枚举规则。我如何按实际顺序遍历这些项没有实际订单。JS对象键在概念上是无序的。在无序的数据结构中,实际的顺序是什么?@fabriciomatté-概念上是无序的。所以这只是JS和PHP之间的一个根本区别吗?@Dominic我在概念上说,因为没有关于对象键顺序的规范,尽管浏览器倾向于遵循一些枚举规则,但对于普通数组,我更喜欢使用普通循环,不需要key.plain for循环快了一些millersecondz,因为它不应用回调为数组中的每个元素创建新的执行上下文/函数范围。是的,我的最新基准测试表明,V8可以优化原生for循环,使其比通常的var i=arr.length更快;这与不久前的情况正好相反,但这只是实现的琐事@多米尼克公平点。它取决于数组的大小。在我看来,如果100或更少,这真的太小了,没有任何区别。否则,构建另一个对象,该对象是基于其键映射普通数组的每个项的关联数组。如果相关,请告诉我,我会提供示例代码。@ShadowWizard Smart!我没想到会这样做,它非常适合我的用例。再次感谢@是的,但对于普通数组,我更喜欢使用普通循环,不需要键。普通for循环比普通for循环快一些千分之一秒,因为它不应用回调为数组中的每个元素创建新的执行上下文/函数范围。是的,我的最新基准测试表明,V8可以优化原生for循环,使其比通常的var i=arr.length更快;这与不久前的情况正好相反,但这只是实现的琐事@多米尼克公平点。它取决于数组的大小。在我看来,如果100或更少,这真的太小了,没有任何区别。否则,构建另一个对象,该对象是基于其键映射普通数组的每个项的关联数组。如果相关,请告诉我,我会提供示例代码。@ShadowWizard Smart!我没想到会这样做,它非常适合我的用例。再次感谢!