2012-04-22 4 views
7

は、他の1つの連想配列をコピーするために以下のコード、javascriptの結合配列をコピーしますか?

<script> 

var some_db = new Array(); 

some_db["One"] = "1"; 

some_db["Two"] = "2"; 

some_db["Three"] = "3"; 

var copy_db = new Array(); 

alert(some_db["One"]); 

copy_db = some_db.slice(); 

alert(copy_db["One"]); 


</script> 

しかし、二アラートが..「未定義」と言いました私私はここで何か間違ったことをやっていますか?任意のポインタをしてください。

+5

javascriptには連想配列はありません。 – Niko

+6

JavaScript配列は非数値キーでは機能しません。だから、 '.slice'はそれらを拾わないのです。プレーンオブジェクトを代わりに使用して、[JavaScriptオブジェクトを複製する最も効率的な方法は何ですか?]を見てください(http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-クローン - a - javascriptオブジェクト)。 –

+1

@ニコ:配列は最初からのオブジェクトです...それらは "回転"されません。 –

答えて

17

JavaScript連想配列はオブジェクトと呼ばれます。

<script> 

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

var copy_db = clone(some_db); 

alert(some_db["One"]); 

alert(copy_db["One"]);  

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
     if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); 
    } 
    return copy; 
} 

</script> 

jQueryを使用していた場合は通常var copy_db = $.extend({}, some_db);を使用します。証明

フィドル:http://jsfiddle.net/RNF5T/

ありがとう@maja。

+2

これはコピーを作成していません。 –

+0

@FelixKling Thanks duh。一定。 – iambriansreed

+0

関数が子オブジェクトをコピーしないことに注意してください。 – maja

4

@NikoはコメントにJavaScriptに連想配列はありません。

実際には配列オブジェクトにプロパティを設定していますが、これはあまり良い考えではありません。実際のオブジェクトを使用する方が良いでしょう。

var some_db = {}; 
some_db["One"] = "1"; 
some_db["Two"] = "2"; 
some_db["Three"] = "3"; 

var copy_db = {}, prop; 
// loop over all the keys in the object 
for (prop in some_db) { 
    // make sure the object has this value, and not its prototype 
    if (some_db.hasOwnProperty(prop)) { 
    copy_db[ prop ] = some_db[ prop ]; 
    } 
} 

多くのライブラリが(別のオブジェクトからコピーキー)まさにこれを行いextend機能を実装します。最も顕著にはjQueryおよびunderscore.jsである。アンダースコアも_.clone(obj)であり、効果的です。_.extend({}, obj)

0

アンダースコア。クローン(http://underscorejs.org/#clone)が役に立ちます。ディクショナリオブジェクトまたは配列へのシャローコピーを実行します。

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

copy_db = _.clone(some_db); 
2

あなたはJSONを使用したい場合は、あなたがこの '連想配列' オブジェクトとることができます。

するvar assArray = {ゼロ:0、1:1、2:2、3:3を、どのような: '永遠に'、あなたは: '欲しい'};

と 'クローン' は、このような:

VAR clonedObj = JSON.parse(JSON.stringify(assArray));

+1

heh、ass array ... – Ogen

関連する問題