2016-04-30 9 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オブジェクトはブロブのようであり、配列は直線のようです。あなたはちょうど180度を回すようにブロブに言った – vtange

答えて

1

原因はありません。オブジェクトのプロパティには順序がありません。オブジェクトのプロパティの順序はJavaScriptでは保証されていません。

ECMAScript 2015以降、Mapオブジェクトを使用することもできます。最後に

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

空きスロットの場合:地図の共有オブジェクトとguarantees the keys orderといくつかの類似点:

3

あなたが最初にあなたのほとんどアレイのようなオブジェクトは、実際の配列に変換した後、.reverse()を使用することができますあなたの最初のインデックスが0ではなく1であるためです。空のスロットは、.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

いい仕事、分かりやすいです。 –

関連する問題