【问题标题】:Jquery sort result not consistentjQuery排序结果不一致
【发布时间】:2013-07-26 09:37:06
【问题描述】:

这就是我在 chrome 控制台中输入的代码:

var o = { "B": "2", "A": "1", "C": "3" };
var e =  $(o).sort();

这就是结果(console.log)

Object {B: "2", A: "1", C: "3"}  //Output for: console.log(o);

// output for console.log(e);
[Object, jquery: "1.10.1", constructor: function, init: function, selector: "", toArray: function…]
0: Object
   A: "1"
   B: "2"
   C: "3"
...

Object {B: "2", A: "1", C: "3"} //output console.log(e[0]);

谁能告诉我如何得到排序的对象,为什么 e 中的对象是排序的而 e[0] 不是?

谢谢你:)

【问题讨论】:

    标签: javascript jquery sorting object


    【解决方案1】:

    jQuery 不会像那样对 normal 对象应用 sort。即使它将Array.prototype.sort 方法抽象到自己的集合中,它也不能像开箱即用那样工作。 jQuery 期望 DOM 节点 在其中,但即使是这样,您至少需要定义一个自定义的 sort function 并将其传递给 .sort() 以使其工作。

    您可能知道 对象键 在 ECMAscript 中没有任何保证顺序。因此,我们只能将其键“静态”排序为 Array,然后 访问 具有该排序的键名列表的对象。

    例如

    var o = { "B": "2", "A": "1", "C": "3" };
    
    var sortedKeys = Object.keys( o ).sort();
    
    console.log( sortedKeys ); // ["A", "B", "C"]
    

    当然,我们可以直接访问调用Array.prototype.forEach的对象,比如

    Object.keys( o ).sort().forEach(function( key ) {
        console.log( o[ key ] );
    });
    

    将输出:1, 2, 3

    【讨论】:

    • 这对我帮助很大!谢谢你这个专业的asnwer :) 在这种情况下我将使用二维数组。
    【解决方案2】:

    没有特殊的jQuery.sort方法,它会使用标准的javascript原生sort函数。 这是对数组进行排序,您正在尝试对对象进行排序。

    但是,e 仍然没有排序 - 它是 chrome 控制台,它始终按字母顺序列出对象的属性。

    如果你改变了

    var e =  $(o).sort();
    

    var e = $(o);
    

    ,控制台输出还是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多