2016-05-02 6 views
0

オブジェクトの要素である配列を逆にしようとしています。 Javascriptでオブジェクトの値である配列を反転する

colorKey = { 
"2m":["#ffffff","#000000"] 
} 

colorKey["2mi"] = colorKey["2m"]; 
Array.reverse(colorKey["2mi"]) 

この

は働いて、[ "2メートル"] [ "2MI"]カラーキーと同じカラーキーを返していません。開発者コンソールでブラウザで同じコマンドを実行すると、正常に元に戻ります。問題はどこだ?

+0

Array.reverse()逆の要素を持つ新しい配列を返します。開始配列は変更しないでください。 – ronIDX

+0

これを試してください:var reverse = Array.reverse(colorKey ["2mi"]); – ronIDX

+2

本当に 'Array.reverse'ですか?私が見つけた唯一の逆関数は 'Array.prototype.reverse'でした。 –

答えて

0

これは静的な方法ではなく、reverseと呼ばれる配列です。 reverseは、Arrayオブジェクトのインスタンスメソッド(Array.prototype.reverse)であるため、Arrayのインスタンスは呼び出し元でなければなりません。

これはあなたの問題を解決:

colorKey = { 
    "2m":["#ffffff","#000000"] 
} 

colorKey["2mi"] = colorKey["2m"]; 
colorKey["2mi"].reverse(); 

出力: [ "#000000"、 "#FFFFFF"]

+0

colorKey ["2mi"] = colorKey ["2m"]; console.log(colorKey ["2m"]); colorKey ["2mi"]。逆(); console.log(colorKey ["2mi"]); これは引き続き ["#000000"、 "#ffffff"] ["#000000"、 "#ffffff"] –

0

リバース()を呼び出すと、配列は、それを変異させるために(逆の場所にあります - 新しい配列は作成されません)。あなたが望むのは、明らかに、配列のコピーを逆にすることです。基本的には、同じ値を持つ新しい配列を作成し、それを元に戻します。

var a = [1,2]、b; b = a.slice(0).reverse();

スライスは、同じ要素を持つ新しい配列を作成します(しかし、要素を複製していないことに注意してください)。

0

@Rajatアガルワル

あなたが求めている何を、逆の順序であなたの前の配列のクローンを作成することです。

唯一の部分はそれを逆にすることです。なぜなら、オブジェクトと配列のクローンを作成する方法はなく、汎用的に使用するための関数として書き留めることもできる一般的な方法ではないからです。

提供されたサンプルからのこの特定の配列は、フラットでありプリミティブのみを含むため、簡単に複製できます。しかし、それに対するソリューションは、提供されるサンプル配列とまったく同じように具体化されます。

このタスクに固有の解決策は、連続した値の普通コマで区切られた文字列を使用して、それらの対応するプリミティブ値:

var colors = "#ffffff,#000000"; 
var colorKey = { 
    "2m":colors.split(","), 
    "2mi":colors.split(",").reverse() 
} 

あなたもたらすの特定の配列にそれを変換することであろう

>> colorKey 
{ 
    2m : #ffffff,#000000, 
    2mi : #000000,#ffffff 
}