jQuery each always sort it?

孤街浪徒 提交于 2019-12-01 14:26:38

问题


I have this object in JS:

var list = {134 : "A",140 : "B",131 : "C"}

I run it with:

jQuery.each(list, function(key, value) { 
console.log(key + " - " + value);
});

The output should be:

134 - A
140 - B
131 - C

But I dont know why, the output is:

131 - C
134 - A
140 - B

Any idea how can I fix it ?


回答1:


First off: that's not a list, it's an object. Object's order is not guaranteed to be kept - each implementation may choose a different ordering.

On the other hand, arrays do preserve order:

var list = [[134, "A"],[140, "B"],[131, "C"]];


jQuery.each(list, function(i, obj) { 
  console.log(i + " - " + obj[0] + " - " + obj[1]);
});



回答2:


Object's properties do not have a defined order, as per the specification.

The mechanics and order of enumerating the properties (...) is not specified.

Source.

Therefore, ECMA implementations do not have to iterate in any order. In fact, the order varies in different browsers/versions.




回答3:


This happens because JavaScript object items do not have order.

In order to fix it you may use two arrays: one with the keys, and second with values:

var keys = [134, 140, 131],
    values = ["A", "B", "C"];

$.each(keys, function(i, key) {
    console.log(key, values[i]);
});



回答4:


I bump into your question, and it took me 10 min to understand.

This is how you would solve your problem :

var list = {134 : "A",140 : "B",131 : "C"};

// 1 - property to list
list = Object.keys(list).map(
    function(key) {
         return { num : key , char : list[key]};;
     });

console.debug(list);
// 2 - sorting the list
var sorted = list.sort(function(a, b) {
            if(a.char < b.char) return -1; return 1;
        });

// 3 output
jQuery.each(sorted, function(index, obj) {      
        console.log(obj.num + " - " + obj.char);
});

JsFiddle: https://jsfiddle.net/wx38rz5L/1578/



来源:https://stackoverflow.com/questions/12914323/jquery-each-always-sort-it

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!