2012-08-03 106 views
1

可能重复:
Sorting a JavaScript object
Sort JavaScript object by key如何在javascript中对对象元素进行排序?

我有数组:(?号顺序)

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

如何获得的aobject的关键排序的所有元素

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

返回字符串类型。

+2

你的意思是对象,因为没有什么所谓的关联数组中的JavaScript – bugwheels94 2012-08-03 14:19:37

+0

我有一点让人感到困扰,因为人们回答说你不能对它们进行排序,显然如果所有的键都是数字的,就可以对它们进行排序。也许他希望遍历按键(按数字顺序),以便他可以将它们加载到一个新的对象中,而这些对象之间的关键并不相距太远。 – VoronoiPotato 2012-08-03 14:42:08

+0

对象不能直接排序,但是“我不是”我的答案将提供对象内的'键名'的有序列表,因此可以在分离中调用它们。 – Austin 2012-08-03 14:44:29

回答

1

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

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

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]); 
       }); 
+0

'keys'按照这个语言定义为'strings'。所以你应该''parseInt'或者使用'+ keyname'或者在'a'或'b'字符串上调用'.localeCompare'。 – jAndy 2012-08-03 14:24:18

+1

@jAndy:“数字”不同于“数字”。你可以有*数字字符串*。我只是说我的排序假定需要数字排序。 – 2012-08-03 14:24:56

+0

请注意,这将返回一个有序数组,列出要访问的对象的键名。 – Austin 2012-08-03 14:26:02

1

简短的回答:不能。

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

1

JavaScript对象(地图/字典/关联数组)没有顺序,您不能对它们排序。您需要先将其转换为数组。因为你只需要在你的循环控制对象的按键,Object.keys() function(potentionally需要对旧版浏览器的垫片)被运往任务:

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]] 
} 
相关问题