【问题标题】:.each loops through object out of order [duplicate].each 乱序遍历对象[重复]
【发布时间】:2013-08-12 13:09:36
【问题描述】:

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

对象:

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

我用 each 函数遍历对象

$.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 中是无序的。这是 jQuery 的 .each 使用的语言规范 under the for... in loop。如果你想要一个有序的集合使用一个数组

标签: javascript jquery


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    对象键在 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

    【讨论】:

      【解决方案3】:

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

      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/

      【讨论】:

      • 这是一个完全被低估的答案。这个对我很有用,谢谢!
      猜你喜欢
      • 2010-12-26
      • 2013-11-01
      • 2013-08-25
      • 1970-01-01
      • 2017-01-06
      • 2017-07-10
      • 2020-10-08
      • 2014-09-28
      • 2016-07-08
      相关资源
      最近更新 更多