1

我创建了一个我试图循环遍历的对象,但是 .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() 的这种行为在技术上是“有序”还是“无序”

4

3 回答 3

6

javascript 对象的属性没有排序。您丢失了他们提供的订单的所有信息。

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

于 2013-08-10T21:14:05.467 回答
3

对象键在 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排序后的数组。

于 2013-08-10T21:15:14.690 回答
2

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

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/

于 2013-08-10T21:24:46.510 回答