Jquery排序结果不一致

时间:2013-07-26 07:54:02

标签: javascript jquery sorting object

这就是我在chrome console中输入的代码:

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]不是?

谢谢:)

2 个答案:

答案 0 :(得分:4)

jQuery不会像这样在普通对象上应用排序。即使它将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

答案 1 :(得分:1)

没有特殊的jQuery.sort方法,它将使用标准的javascript本地sort函数。 这个对数组进行排序,你试图对一个对象进行排序。

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

如果你改变了

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

var e = $(o);

,控制台输出仍然是相同的。