2013-07-31 62 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);