如何在javascript中反转对象?

How to reverse an object in javascript?

本问题已经有最佳答案,请猛点这里访问。

我想在javascript中反转一个对象。例如:

输入:obj ={1: 'banana', 2: 'apple',3:'orange' }

输出:['orange','apple','banana' ]

我尝试过"array.prototype.reverse.apply(obj)",但无法获得结果。

1
2
3
 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()的其他用法是什么?


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

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

由于第一个索引是1,而不是0,所以末尾的空槽if cause。您可以使用.length--.pop()删除空插槽。

或者,如果您想借用.reverse并在同一对象上调用它,那么它必须是一个完全类似数组的对象。也就是说,它需要一个length财产:

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

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


这是我的对象旋转实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    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;
      }


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

自ECMAScript 2015以来,使用地图对象可能是一种替代方法。地图与对象有一些相似之处,并保证键顺序:


1
2
3
4
5
6
7
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;
}