1

可能重复:
对 JavaScript 对象
进行排序 按键对 JavaScript 对象进行排序

我有数组:

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

如何获取按键排序的对象的所有元素(数字顺序?)

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

返回字符串类型。

4

4 回答 4

1

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

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

于 2012-08-03T14:21:39.997 回答
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]);
               });
于 2012-08-03T14:22:54.660 回答
1

简短的回答:你不能。

长答案:JavaScript 中的关联数组实际上是 JavaScript 对象。当您添加一个新元素时,您实际上是在向该对象添加一个新成员。虽然大多数浏览器会按照添加的顺序枚举这些成员,但标准规定顺序是未定义的。您无法对未定义的内容进行排序。

于 2012-08-03T14:23:30.023 回答
1

JavaScript 对象(地图/字典/关联数组)没有顺序,您无法对它们进行排序。您需要先将其转换为数组。由于您在循环中只需要对象的键,因此该Object.keys()函数(对于旧浏览器可能需要一个 shim)用于该任务:

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]]
}
于 2012-08-03T14:23:56.610 回答