如何在javascript中对对象元素进行排序?

How to sort object elements in javascript?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Sorting a JavaScript object
Sort JavaScript object by key

我有数组:

1
2
3
4
5
var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1

如何让aObject的所有元素按键排序(数字顺序?)

1
2
3
for ( key in arr ) {
     alert(typeof(key))
}

返回字符串类型。


javascript对象(映射/字典/关联数组)没有顺序,无法对其排序。您需要先将其转换为数组。由于您在循环中只需要对象的键,因此Object.keys()功能(可能需要较旧浏览器的填充程序)将用于执行以下任务:

1
2
3
4
5
6
var obj = {...};
var keys = Object.keys(obj).sort(function(a,b){return a-b;}); // numerically sorted
for (var i=0; i<keys.length; i++) {
    alert(keys[i]);
    // access the values by obj[keys[i]]
}

简短的回答:你不能。

答案很长:javascript中的关联数组实际上是javascript对象。添加新元素时,实际上是向对象添加新成员。虽然大多数浏览器将按照添加成员的顺序枚举这些成员,但标准声明顺序未定义。不能对未定义的内容进行排序。


假设您一开始没有使用数组是有原因的,那么您可以获取一个可枚举对象属性数组,并对该数组进行排序…

1
2
3
4
var sorted = Object.keys(my_obj)
                   .sort(function(a,b) {
                            return a - b;
                         });

这假设键是数字的。

然后您可以迭代数组,并使用每个键从my_obj中获取值…

1
2
3
sorted.forEach(function(key) {
                   console.log(my_obj[key]);
               });


这不是一个假设数组,这是一个对象。javascript中没有关联数组。

此外,对象没有排序。对象中键的顺序没有意义。