2012-05-03 25 views
2

ここでは、私がやろうとしているものの単純すぎるバージョンです。その後jquery deep replace

var usersChoice; 
var object1 = {name: 'fu', id:'123', infoArray: [1,2,3,4,5]}; 
var object2 = {name: 'bar', id:'456', infoArray: [9,8]}; 

jQuery.extend(true, usersChoice, object1); 

私は

jQuery.extend(true, usersChoice, object2); 

に結果を私の心を変更したい場合は:私が欲しいもの

usersChoice = {name: 'bar', id:'456', infoArray: [9,8,***3,4,5***]}; 

は全く新しいと交換される古いオブジェクトです。私のような拡張直前に呼び出すことができますだけでも、深い消去機能...私は試してみました、レコードだけuserChoice =新しいオブジェクトまたはコピーしていないが、ただ、元のオブジェクトを指し示すために

userChoice.nukeItFromOrbit(); 

。両方のソリューションは、ラインに沿ったある時点で範囲外になるという厄介な傾向があります。 (これらのオブジェクトのいくつかは「this」として渡されていますが、原因は疑いがあります)

ディープコピーホイールを再作成せずにどうすればよいですか?私が見つけたすべてのことを見てきたのは、ホイールを再発明している、または私がやっていることをやらなければならない理由がないと言われていることです。 =/

+0

空のオブジェクトを拡張していませんか?またはobject2が欠落していた場合は、最終結果で名前が失われますか? (私には、これを行う必要がないことのキャンプにいるので、また、これのためのユースケースを与えてください) –

+0

質問は不明です、あなたはdeepExtendを望んでいるか、深く伸びたがりませんか? – Abid

+0

@Abid私はすべてのデータと新しい入れ墨のヌークェンドされる古いオブジェクトを深く置き換えたい。 –

答えて

1

うーん、私は(そうコメントしてください私を残している場合)、私は何かが欠けていないよ願っていますが、なぜちょうどだから、あなたはそれが配列以外everthingをマージしたい

usersChoice = jQuery.extend(true, {}, object2); 
+0

私は正直なところあなたのソリューションが動作していないのか分かりません。 'usersChoice = jQuery.extend(true、{}、object2);' は、そのサブ関数の範囲内で動作しますが、変更はuserChoice外には反映されません。 'jQuery.extend(true、usersChoice、object2);' は範囲外ではありますが、上記の制限があります。 –

+0

これは、私が(答えをテストするための)使い方のサンプルコードを必要とします。 – Meligy