var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
どのように私は「古い」と「新しい」を追加し、につながるん:既存のjavascriptオブジェクトにjavascriptオブジェクトを追加するにはどうすればよいですか?
{ 'a': 999, 'b': 5, 'c': 10 }
var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
どのように私は「古い」と「新しい」を追加し、につながるん:既存のjavascriptオブジェクトにjavascriptオブジェクトを追加するにはどうすればよいですか?
{ 'a': 999, 'b': 5, 'c': 10 }
var o = { 'a':3, 'b': 5 };
var n = { 'a': 999, 'c': 10 };
for (var key in n){
o[key]=n[key];
}
あなたはフレームワークを使用している場合、ほとんどはそれを行うだろう機能を持っている、例えばjQueryの延長する。そうでなければ、フレームワークなしでJavaScriptを使用している場合は、自分で行う必要があります。
for ... inループを使用して実行できます。
for(var key in newObject)
{
if(!newObject.hasOwnProperty(key)) {
continue;
}
oldObject[key] = newObject[key];
}
副詞として、vars "new"は複数の言語でキーワードを呼び出さないでください。 Npは例のためだけです。私はコメントからの提案に基づいて、newからnewObjectに変更しました。
のため...ループにvarが実際の新しい
+1の値をチェックすべきですが、 'if'プロパティが見つからない場合は続行するのではなく、 – nnnnnn
実際にはもっとシンプルになりますが、それほど複雑ではありません。この方法は、拡張が容易であるという利点があります。深いオブジェクトのマージ(合計上書きの代わりにサブオブジェクトのプロパティをマージする)が必要な場合それが立つにつれて、ifステートメントを逆にして割り当てを取り囲むことで、少し良くなるでしょう。 –
実際にスタイルを整えています...私は単一のフローアプローチを好むので、上記の逆を使用します。しかし、上記の*は 'new'が予約語として解釈され、正しく構文解析されないため構文エラー*になります。それは最初の投稿では貧しい選択だったと考えています。おそらくそれを改名し、将来の読者のためにメモを追加することを検討してください:) –
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}
になります。あるいは、複数の図書館の既存の機能があり、1つまたは2つ言及する価値があるかもしれません。 –
彼はオーバーライドを望んでいます - だから、hasOwnPropertyをチェックするだけでは不十分です - 彼は 'hasOwnProperty()'を覚えていれば –