2013-07-31 19 views
8

Próbuję scalić dwa obiekty i zastąpić wartości w procesie.Scalanie dwóch obiektów i nadpisywanie wartości w przypadku konfliktu

Czy można wykonać następujące czynności, używając underscore? (Jestem w porządku nie za pomocą podkreślenia po prostu ma to być prosta)

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

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

var obj3 = merge(obj1, obj2); 

/* 

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

*/ 
+0

Możesz użyć jQuery, jeśli chcesz: http://api.jquery.com/jquery.extend/ – pmrotule

Odpowiedz

13

Zastosowanie extend:

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

Pierwszym argumentem jest modyfikowany, więc jeśli nie chcesz zmodyfikować obj1 lub obj2 prostu przekazać w {}.

+0

cholera, z jakiegoś powodu myślałem, że to nie działa dla mnie. – ThomasReggi

+1

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

3

Ten łączy b do A:

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

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

Albo nawet:

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

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

Ten zwraca obiekt scalony:

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); 
Powiązane problemy