3

这就是我在 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] 不是?

谢谢 :)

4

2 回答 2

4

jQuery 不会像这样对普通对象应用排序。即使它将方法抽象到自己的集合中,它也不能像开箱即用那样工作。jQuery 期望DOM 节点在那里,但即使是这样,您至少需要定义一个您传递的自定义以使其工作。Array.prototype.sortsort 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

于 2013-07-26T08:03:07.333 回答
1

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

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

如果你改变

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

var e = $(o);

,控制台输出仍然是一样的。

于 2013-07-26T08:12:32.660 回答