2016-04-30 50 views
-1

我想在JavaScript中反轉對象。 例如:如何在JavaScript中反轉對象?

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

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

我與 '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()的其他用法是什麼?

+11

對象沒有任何順序。 –

+0

你應該使用一個數組,如果你想要訂單 – epascarello

+0

想想看,如果它有幫助:javascript對象就像blob和數組就像直線。你剛剛告訴blob 180度轉身 – vtange

回答

1

這樣做沒有意義,導致對象的屬性沒有順序。 JavaScript中不保證對象中的屬性順序;

由於ECMAScript 2015,使用Map對象可能是一種選擇。一個地圖股一些相似之處與物體guarantees the keys order

3

您可以將幾乎類似數組的對象轉換到一個真正的數組,然後使用.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屬性。

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

給你的代碼添加一些註釋 – HDJEMAI

+0

不能正常工作.... –

2

這是我實現對象的旋轉

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

不錯的工作,簡單理解。 –