这就是我在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]不是?
谢谢:)
答案 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);
,控制台输出仍然是相同的。