2013-07-31 104 views
8

我想合併兩個對象並覆蓋過程中的值。合併兩個對象並覆蓋值如果衝突

是否可以用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

該死的,出於某種原因,我認爲這不適合我。 – ThomasReggi

+1

in vanilla JS:const obj3 = Object.assign({},obj1,obj2); – Matthew

3

這一個合併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);