使用JS发出反转对象数组

时间:2012-03-14 14:46:58

标签: javascript object reverse

我正在解析JSON并使用javascript获取对象数组。我一直这样做,然后为每个对象附加一个元素:

for(o in obj){ ... }

但我意识到,在某种情况下,我想在数组中倒退。所以我在for循环之前尝试了这个:

obj = obj.reverse();

然而,这并没有颠倒数组中对象的顺序。我可以简单地在for循环中放置一个count变量来手动反转,但我很困惑为什么反向似乎不适用于对象数组。

2 个答案:

答案 0 :(得分:10)

JavaScript中没有“对象数组”这样的东西。有对象,有阵列(当然,也是对象)。对象具有属性,并且不以任何定义的方式对属性进行排序。

换句话说,如果你有:

var obj = { a: 1, b: 2, c: 3 };

无法保证for ... in循环将以“a”,“b”,“c”的顺序访问属性。

现在,如果你有一个对象数组,如:

var arr = [ { a: 1 }, { b: 2 }, { c: 3 } ];

然后那是一个普通的数组,你可以反转它。 .reverse()方法会改变数组,因此您不需要重新分配它。如果你有一个对象数组(或任何类型值的真实数组),那么你应该使用for ... in来迭代它。使用数字索引。

编辑 - 在一条有用的评论中指出.reverse()确实会返回对数组的引用,因此重新分配不会对任何内容产生任何影响。

答案 1 :(得分:2)

那是因为for (o in obj)不会将数组迭代为数组,而是作为对象。它迭代对象中的属性,该属性还包括数组中的成员,但它们按名称顺序迭代,而不是按顺序迭代它们。

此外,您使用的reverse方法错误。它将数组反转到位,因此不要使用返回值:

obj.reverse();