Jquery + rails 4
在json_data
实例中,我有一些带键和值的数据,键是一个整数id,值是一个包含数据的对象。但是,当我尝试使用jQuery $ .each迭代这些数据时函数,结果返回按键排序。如何以原始顺序迭代我的对象集合?
$.each(json_data, function(key, value){
console.log(key);
});
key = 6181 30654 39148 30743 30510 42998 5788 30401 ... // Mozilla工作正常(右)
key = 5788 6011 6181 30401 30510 30639 30654 30698 30743 ... // Chrome无法正常工作(错误)
答案 0 :(得分:0)
关于对象中的“顺序”:
JavaScript对象是一个哈希表,并且针对key:value对的常量时间查找进行了优化。
数组是一种数据结构,其中元素被分配给离散索引值。迭代数组的元素时,将返回与数组中项的顺序匹配的可预测模式。
然而,在一个对象中,没有索引值,因此没有可持续的可预测方法来按顺序迭代它。该对象仅存储为常量时间查找而优化的键:值对。
编辑:我将演示这两种迭代方法仅仅是为了说明,但我想提前警告你,他们不会改变你不会以一致的顺序返回键的事实。
var json_data = {6181:true, 30654:true, 39148:true, 30743:true, 30510:true, 42998:true, 5788:true, 30401:true};
for(item in json_data){
console.log(item);
} // *might* return a different order based on browser or JavaScript implementation
再澄清一次:对象与特定的“订单”无关。它们经过优化,可提供“恒定时间”查找。无论对象的大小如何,如果查询某个键,相关的值将在固定的时间内返回给您。
如果您需要强加特定订单,则需要使用数组。
示例:
var json_data = [6181, 30654, 39148, 30743, 30510, 42998, 5788, 30401];
for(var i = 0; i < json_data.length; i++){
console.log(json_data[i]);
}
// always returns the values in the same order they are in the json_data array.
// changing the order in the array will change the order they are output and
// and that order will be the same regardless of which browser or version of JavaScript you
// are using.