2011-07-28 5 views
12

私が持っている場合:変更キー

var myArray = new Array(); 

myArray['hello'] = value; 

がどのように私は何か他のものへの鍵を「ハロー」変更できますか?

このようなものが動作します。

var from = 'hello', 
    to = 'world', 
    i, value = myArray[from]; 

for(i in myArray) 
    if(i == from) myArray.splice(i, 1); 

myArray[to] = value; 

しかし、それを実行するネイティブ関数またはより良い方法はありますか?

編集:原因JSで連想配列の欠如に

、私は可能な限り効率的にオブジェクトのプロパティ名を変更何をしたいのか。

+0

"splice()"メソッドは名前付きプロパティでは機能しません。これはArrayメソッドなので、オブジェクトの整数インデックス付きプロパティに対してのみ動作します。 – Pointy

答えて

23

JavaScriptには、連想配列のようなものはありません。オブジェクトの代わりに使用することができます。

var myHash = new Object(); 

または

var myHash = {}; 

置き換えるには、次のように行うことができます。

myHash["from"] = "value"; 
myHash["to"] = myHash["from"]; 
delete myHash["from"]; 

が、それを書くための好ましい方法:

myHash.from = "value"; 
myHash.to = myHash.from; 
delete myHash.from; 
+1

削除の問題は、実際には削除されないことです。値をundefinedに設定するだけです。 –

+1

ドキュメントによれば、それは当てはまりません。http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

申し訳ありませんが、あなたは正しいです。それは知らなかった。 –

2

本当にプロパティ名を変更することはできませんが、プロパティ名を新しい名前に割り当ててから元の名前を削除することはできます。

myArray['world'] = myArray.hello; 
delete myArray.hello; 

また、Arrayインスタンスを使用していますが、単純なオブジェクトとして使用しています。あなたと同じようにうまくいくだろうやっているすべてのもの:

var myArray = {}; 

「スプライス()」それが唯一の実際の整数インデックス付きの配列プロパティのだから、あなたが、動作しません掲載のコードにしようとしています、名前付きプロパティではありません。

「削除」は本当にプロパティを削除しませんが、実際には関係ありません。 「定義されていない」値は、プロパティのオブジェクトをチェックしてそのプロパティがないときに得られる値です。