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

时间:2012-08-03 14:17:56

标签: javascript

  

可能重复:
  Sorting a JavaScript object
  Sort JavaScript object by key

我有阵列:

var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1

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

for ( key in arr ) {
     alert(typeof(key))
}

返回字符串类型。

4 个答案:

答案 0 :(得分:1)

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

此外,未订购对象。对象中键的顺序没有意义。

答案 1 :(得分:1)

假设您首先没有使用数组的原因,您可以获取可枚举对象属性的数组,并对该数组进行排序......

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

这假设键是数字。

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

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

答案 2 :(得分:1)

简短回答:你不能。

长答案:JavaScript中的关联数组实际上是JavaScript对象。添加新元素时,您实际上是在向对象添加新成员。虽然大多数浏览器会按照添加的顺序枚举这些成员,但标准规定订单未定义。你不能对未定义的东西进行排序。

答案 3 :(得分:1)

JavaScript对象(地图/字典/关联数组)没有顺序,您无法对它们进行排序。您需要先将其转换为数组。由于您只需要循环中对象的键,Object.keys() function(可能需要旧版浏览器的垫片)才能完成任务:

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]]
}