我有数组:
var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1
如何获取按键排序的对象的所有元素(数字顺序?)
for ( key in arr ) {
alert(typeof(key))
}
返回字符串类型。
我有数组:
var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1
如何获取按键排序的对象的所有元素(数字顺序?)
for ( key in arr ) {
alert(typeof(key))
}
返回字符串类型。
这不是一个关联数组,这是一个对象。javascript 中没有关联数组。
此外,对象没有排序。对象中键的顺序是没有意义的。
假设出于某种原因您首先不使用数组,您可以获得可枚举对象属性的数组,然后对该数组进行排序......
var sorted = Object.keys(my_obj)
.sort(function(a,b) {
return a - b;
});
这假设键是数字的。
然后您可以迭代数组,并使用每个键从my_obj
...中获取值
sorted.forEach(function(key) {
console.log(my_obj[key]);
});
简短的回答:你不能。
长答案:JavaScript 中的关联数组实际上是 JavaScript 对象。当您添加一个新元素时,您实际上是在向该对象添加一个新成员。虽然大多数浏览器会按照添加的顺序枚举这些成员,但标准规定顺序是未定义的。您无法对未定义的内容进行排序。
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]]
}