2011-07-22 11 views

答えて

1
var o = { 'a':3, 'b': 5 }; 
var n = { 'a': 999, 'c': 10 }; 

for (var key in n){ 
    o[key]=n[key]; 
} 
+3

になります。あるいは、複数の図書館の既存の機能があり、1つまたは2つ言及する価値があるかもしれません。 –

+0

彼はオーバーライドを望んでいます - だから、hasOwnPropertyをチェックするだけでは不十分です - 彼は 'hasOwnProperty()'を覚えていれば –

5

あなたはフレームワークを使用している場合、ほとんどはそれを行うだろう機能を持っている、例えばjQueryの延長する。そうでなければ、フレームワークなしでJavaScriptを使用している場合は、自分で行う必要があります。

for ... inループを使用して実行できます。

for(var key in newObject) 
{ 
    if(!newObject.hasOwnProperty(key)) { 
     continue; 
    } 
    oldObject[key] = newObject[key]; 
} 

副詞として、vars "new"は複数の言語でキーワードを呼び出さないでください。 Npは例のためだけです。私はコメントからの提案に基づいて、newからnewObjectに変更しました。

のため...ループにvarが実際の新しい

+0

+1の値をチェックすべきですが、 'if'プロパティが見つからない場合は続行するのではなく、 – nnnnnn

+0

実際にはもっとシンプルになりますが、それほど複雑ではありません。この方法は、拡張が容易であるという利点があります。深いオブジェクトのマージ(合計上書きの代わりにサブオブジェクトのプロパティをマージする)が必要な場合それが立つにつれて、ifステートメントを逆にして割り当てを取り囲むことで、少し良くなるでしょう。 –

+0

実際にスタイルを整えています...私は単一のフローアプローチを好むので、上記の逆を使用します。しかし、上記の*は 'new'が予約語として解釈され、正しく構文解析されないため構文エラー*になります。それは最初の投稿では貧しい選択だったと考えています。おそらくそれを改名し、将来の読者のためにメモを追加することを検討してください:) –

4

jQueryのより良い関数呼び出しの$ .extendを提供したにチェックするために必要な権利のPST、。 例えば:

var old_obj = {'a': 3, 'b': 5}; 
var new_obj = {'a': 999, 'c': 10}; 
var result = $.extend(old_obj, new_obj); 

結果は、これはあまりにも多くの上にコピーを避けるために、 `hasOwnProperty`を使用する必要があります

{a: 999, b: 5, c: 10} 
関連する問題