【问题标题】:jQuery each always sort it?jQuery 每个总是排序吗?
【发布时间】:2012-10-06 12:44:15
【问题描述】:

我在 JS 中有这个对象:

var list = {134 : "A",140 : "B",131 : "C"}

我运行它:

jQuery.each(list, function(key, value) { 
console.log(key + " - " + value);
});

输出应该是:

134 - A
140 - B
131 - C

但我不知道为什么,输出是:

131 - C
134 - A
140 - B

知道如何解决吗?

【问题讨论】:

    标签: jquery arrays each


    【解决方案1】:

    我碰到你的问题,我花了 10 分钟才明白。

    这就是你解决问题的方法:

    var list = {134 : "A",140 : "B",131 : "C"};
    
    // 1 - property to list
    list = Object.keys(list).map(
        function(key) {
             return { num : key , char : list[key]};;
         });
    
    console.debug(list);
    // 2 - sorting the list
    var sorted = list.sort(function(a, b) {
                if(a.char < b.char) return -1; return 1;
            });
    
    // 3 output
    jQuery.each(sorted, function(index, obj) {      
            console.log(obj.num + " - " + obj.char);
    });
    

    JsFiddle:https://jsfiddle.net/wx38rz5L/1578/

    【讨论】:

      【解决方案2】:

      首先:这不是一个列表,它是一个对象。不保证保持对象的顺序 - 每个实现都可以选择不同的顺序。

      另一方面,数组确实保持顺序:

      var list = [[134, "A"],[140, "B"],[131, "C"]];
      
      
      jQuery.each(list, function(i, obj) { 
        console.log(i + " - " + obj[0] + " - " + obj[1]);
      });
      

      【讨论】:

      • 那么如何禁用排序?
      • @fdrv 你不能,它发生在 OP 上,因为浏览器确实对键的枚举顺序进行了排序,就像现代浏览器一样。除了使用像this answer这样的数组而不是对象之外,您无法通过任何其他方式恢复原始顺序。
      【解决方案3】:

      这是因为 JavaScript 对象项没有顺序。

      为了修复它,您可以使用两个数组:一个带有键,第二个带有值:

      var keys = [134, 140, 131],
          values = ["A", "B", "C"];
      
      $.each(keys, function(i, key) {
          console.log(key, values[i]);
      });
      

      【讨论】:

        【解决方案4】:

        根据规范,对象的属性没有定义的顺序。

        未指定枚举属性 (...) 的机制和顺序。

        Source.

        因此,ECMA 实现不必以任何顺序进行迭代。其实顺序不一样in different browsers/versions

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-19
          • 2011-10-22
          • 2012-05-19
          • 2011-03-12
          相关资源
          最近更新 更多