Jquery排序结果不一致

Jquery sort result not consistent

本文关键字:不一致 结果 排序 Jquery      更新时间:2023-09-26

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

谢谢:)

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

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

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

如果您更改

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

var e = $(o);

,控制台输出将仍然相同。