Jquery排序结果不一致
Jquery sort result not consistent
这是我在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);
,控制台输出将仍然相同。
相关文章:
- 使用forEach和.shift()时结果不一致
- 将base64图像数据作为src分配给图像时,Firefox和Chrome上的结果不一致
- Meteor SmartCollection给出不一致的结果
- 返回不一致结果的日期(取决于是否存在前导零)
- Jasmine 测试在测试运行中、Firefox/Chrome 之间以及检查器开/关时的结果不一致
- 为什么结果与此装饰函数中的预期不一致
- 使用边界放置搜索请求,结果不一致
- 比较Javascript中的日期-结果不一致
- 为什么这种排序算法会在浏览器之间产生不一致的结果
- Jquery排序结果不一致
- 由于异步表单提交,结果不一致
- Javascript通配符regex搜索结果不一致
- 为什么使用按钮或Div运行查询会返回不一致的结果?
- Firefox 3.6.20 regex给出不一致的结果
- jQuery UI -多个自动完成-不一致的结果
- Javascript所见即所得文本区域插件在不同浏览器中产生不一致的结果
- 不一致的HTML5画布结果
- mongo结果与唯一字段不一致
- 不一致的 getTimezoneOffset 结果
- PHP密码哈希算法结果与Javascript结果不一致