.each循环遍历对象时出错

.each loops through object out of order

本文关键字:出错 对象 遍历 循环 each      更新时间:2023-09-26

我创建了一个试图循环遍历的对象,但.each()函数试图首先对对象进行排序,然后循环遍历,结果不理想。顺便说一句,我使用的是Chrome,我听说对象循环可能相当依赖于浏览器。

对象:

var myObject = {"000": "12:00", "100": "1:00", "200": "2:00" .. and so on }

我用的每个函数循环遍历对象

$.each(myObject, function (key, value) {
    // display value 
} // outputs 1:00 2:00 12:00

我希望它的输出是12:00 1:00 2:00,这是我为对象提供的顺序。我在更改对象关键点方面没有太大的余地,所以如果可以的话,我想保留这些关键点。

以下是JSFiddle:http://jsfiddle.net/hyc8U/

谢谢!

PS。我不确定.each()的这种行为在技术上是"有序"还是"无序"

javascript对象的属性不是按顺序排列的。您将丢失他们提供的订单的所有信息。

如果需要特定的顺序,可以使用数组,或者获取对象的键并通过用户定义的函数对其进行排序。

对象键在Javascript中是无序的。您需要将您的对象转换为一个数组,如下所示:

    var myList = [{key: "000": val: "12:00"}, 
                  {key: "100": val: "1:00"}, 
                  {key: "200": val: "2:00"}, 
                  // ...
                 ];

然后可以对数组(myList.sort(function(o) {return o.key;});)进行排序,并对已排序的数组调用.each

看起来插入顺序不是任意的,还是只是意外?否则,您可以只获取密钥并对其进行排序,然后按排序后的密钥数组顺序访问对象:

var myObject = {"000": "12:00", "100": "1:00", "200": "2:00"};
$.each(Object.keys(myObject).sort(), function(i, v){
    $("div").append(myObject[v] + "<br>");
});

http://jsfiddle.net/hyc8U/2/