2012-03-23 17 views
8

にJavaScriptオブジェクトを追加します。私はが</p> <pre><code>options = { underscored: true } products = { foo: bar } </code></pre> <p>を考えると、他のJavaScriptオブジェクト

products = { 
underscored: true 
foo: bar 
} 

はJavascriptで別のオブジェクトにオブジェクトをプッシュすることが可能です取得したいのですが?

+0

http://stackoverflow.com/questions/1334660/combining-javascript-objects-into-one – bkconrad

答えて

20
<script> 
function mix(source, target) { 
    for(var key in source) { 
    if (source.hasOwnProperty(key)) { 
     target[key] = source[key]; 
    } 
    } 

} 

    mix(options, products); 
</script> 

UPDATE:

より良いオプションの数がES6とES7は共通

ES6を取得して、今がある - これはobjectToMergeTo

const combinedObject = Object.assign(objectToMergeTo, source1, source2) 

ES7を(変異させます構文の美しさをスプレッド演算子で) - このバージョンでは新しいインスタンスが作成されますが、スプレッド演算子を使用してオブジェクトに追加することはできません。 「バー」の周り

const combined = { ...source1, ...source2 } 
+0

'hasOwnProperty()'の+1です!これは、オブジェクトのプロパティを反復処理する適切な方法です。 – jwueller

+0

お世話になりました。 – lemon

+1

ピーター、そのES7の構文はちょうどそれらのプロパティではなく、全体として2つのオブジェクトを含む第3のオブジェクトを作成しているようです。 – TheEnvironmentalist

5

あなたはこれを行うことができます:

for(var key in options) { 
    products[key] = options[key]; 
} 

効果的に2つのオブジェクトの変数を組み合わせることであろうと。 4年後

+0

これは 'hasOwnProperty'チェックがなく、2つのオブジェクトに応じて予期しない結果が発生します。また、グローバル変数 'key'を作成しますが、これは悪いです。常に 'var'キーワードを使用してください! – jwueller

+0

グローバル変数を修正しました。これを指摘してくれてありがとうございます。 –

0
var options = { 
    underscored: true 
}; 
var products = { 
    foo: 'bar' 
}; 
products.underscored = options.underscored; 
alert(products.underscored+":"+products.foo); 

プット引用符は、それが実際のオブジェクトの値、セミコロンとVARを持たせることができますが、ポイントを得ます。

編集:また注目に値する;

products.options = options; 
alert(products.options.underscored);//alerts true 
0

jquery.extend(製品、オプション)を使用できます。 jQuery.extendは2つのオブジェクトを結合し、ターゲットオブジェクト内の一致する要素値を乗り越えて結果のオブジェクトを返します。詳細はhttp://api.jquery.com/jquery.extend/

関連する問題

 関連する問題