如何将JavaScript中键作为索引的对象转换为数组?

8

我想在JavaScript中将一个以索引为键的对象转换为数组。

例如:

输入:obj = {1:'香蕉',2:'苹果',3:'橘子'}

输出:['橘子','苹果','香蕉']

我尝试使用“Array.prototype.reverse.apply(obj)”,但无法得到结果。

 var obj ={1: 'banana', 2: 'apple',3:'orange' };
 var res =Array.prototype.reverse.apply(obj);
 console.log(res); // return the same object, not reverse

Array.prototype.reverse()的其他用途是什么?

17
物体没有任何顺序。 - Daniel A. White
如果你想要顺序,应该使用数组。 - epascarello
想象一下,如果有帮助的话:JavaScript对象就像“blob”,而数组就像“直线”。你刚刚让一个“blob”掉头了180度。 - vtange
谢谢!我之前尝试使用Array.prototype.reverse.apply(obj)。但现在我明白了,我可以在函数内部使用它,它会返回反转后的对象值。 - Nilam
1
我不同意关闭。顺序由键给出,这些键是数组索引。 - Oriol
1
@DanielA.White 我可以接收到一个JS对象响应,其中键按特定顺序排列,表示页面上的项目。在我看来,Js对象肯定可以有顺序。 - ESR
4个回答

29

您可以先将类似数组的对象转换为真正的数组,然后使用.reverse()

Object.assign([], {1:'banana', 2:'apple', 3:'orange'}).reverse();
// [ "orange", "apple", "banana", <1 empty slot> ]

由于您的第一个索引为1而不是0,因此末尾出现了空槽。您可以使用.length--.pop()来删除空槽。

或者,如果您想借用.reverse并在同一对象上调用它,则该对象必须是完全类数组对象。也就是说,它需要一个length属性:

Array.prototype.reverse.call({1:'banana', 2:'apple', 3:'orange', length:4});
// {0:"orange", 1:"apple", 3:"banana", length:4}

请注意,它将返回完全类似于数组的对象,因此它不是真正的数组。然后,您可以使用delete删除length属性。


17

这是我对对象旋转的实现

    function reverseObject(object) {
        var newObject = {};
        var keys = [];

        for (var key in object) {
            keys.push(key);
        }

        for (var i = keys.length - 1; i >= 0; i--) {
          var value = object[keys[i]];
          newObject[keys[i]]= value;
        }       

        return newObject;
      }

2
做得好,简单易懂。 - Nikola Lukic
我认为 for (var key in object) { 中的 for...in 不保证顺序,因此您可能无法获得完美的轮换。 - kyw

2

这样做没有意义,因为对象的属性没有顺序。在JavaScript中,对象属性的顺序不能保证;

自ECMAScript 2015以来,使用Map对象可能是一种替代方案。 Map与Object有些相似之处,并且保证键的顺序


对象是有顺序的,这个顺序是由元素定义的顺序来设置的。 - DavidTaubmann

-2
var reverseObj = function(object) {
    var NewObj = {}, keysArr = Object.keys(object);
    for (var i = keysArr.length-1; i >= 0; i--) {
        NewObj[keysArr[i]] = object[keysArr[i]];
    }
    return NewObj;
}

为你的代码添加一些注释。 - HDJEMAI
无法工作... - Yossi Neiman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接