2013-07-31 5 views
8

2つのオブジェクトをマージし、その値を上書きしようとしています。2つのオブジェクトをマージし、競合した場合に値を上書きします。

underscoreでは次のことが可能ですか? (私はちょうどそれがシンプルになりたいアンダースコアを使用しないで大丈夫だよ)

var obj1 = { 
    "hello":"xxx" 
    "win":"xxx" 
}; 

var obj2 = { 
    "hello":"zzz" 
}; 

var obj3 = merge(obj1, obj2); 

/* 

{ 
    "hello":"zzz", 
    "win":"xxx" 
} 

*/ 
+0

必要に応じてjQueryを使うことができます:http://api.jquery.com/jquery.extend/ – pmrotule

答えて

13

使用extend

var obj3 = _.extend({}, obj1, obj2); 

最初の引数は変更され、あなたがobj1obj2を変更したくない場合は、単に{}に渡しています。

+0

何らかの理由で私はこれが私のために働いていないと思っていました。バニラJSの – ThomasReggi

+1

:const obj3 = Object.assign({}、obj1、obj2); – Matthew

3

この1つはにB をマージ:

function merge(a, b) { 
    for(var idx in b) { 
     a[idx] = b[idx]; 
    } //done! 
} 

merge(a, b); //a is merged 

あるいは:

Object.prototype.myMerge = function(b) { 
    for(var idx in b) { 
     this[idx] = b[idx]; 
    } //done! 
}; 

a.myMerge(b); //a is merged 

このオブジェクトは、マージされたオブジェクトを返します。

function merge(a, b) { 
    var c = {}; 
    for(var idx in a) { 
     c[idx] = a[idx]; 
    } 
    for(var idx in b) { 
     c[idx] = b[idx]; 
    } 
    return c; 
} 

var c = merge(a, b); 
関連する問題