How Can I Merge Javascript Two Objects But Only Update Properties That Change
I'm trying to write a function that will let me update my kitchen in this example below. Using something like underscore's extend, however, blows away the beer in my fridge as it's
Solution 1:
Since you're already using Underscore, you could use Lodash instead, which is a superset of Underscore, and use its #merge
function.
See this question about Differences between Lodash and underscore
// My original kitchen
var kitchen = {
fridge: {
beer: true,
celery: false
},
cabinets: {
candy: true
}
};
// updates I would like to make to my kitchen
var changeKitchen = {
fridge: {
celery: true
}
};
var updatedKitchen = _.merge(kitchen, changeKitchen);
document.write(JSON.stringify(updatedKitchen));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
Solution 2:
Use _.extend
on the nested objects instead:
function update(obj1, obj2) {
for (var p in obj2) {
if (obj1[p]) {
_.extend(obj1[p], obj2[p]);
} else {
obj1[p] = obj2[p];
}
}
}
update(kitchen, changeKitchen);
Solution 3:
Here is a solution in plain Javascript:
var kitchen = { fridge: { beer: true, celery: false }, cabinets: { candy: true } },
changeKitchen = { fridge: { celery: true } };
function update(source, target) {
Object.keys(target).forEach(function (k) {
if (typeof target[k] === 'object') {
source[k] = source[k] || {};
update(source[k], target[k]);
} else {
source[k] = target[k];
}
});
}
update(kitchen, changeKitchen);
document.write('<pre>' + JSON.stringify(kitchen, 0, 4) + '</pre>');
Solution 4:
Try using for..in
loop , Object.keys()
// My original kitchen
var kitchen = {
fridge: {
beer: true,
celery: false
},
cabinets: {
candy: true
}
};
var changeKitchen = {
fridge: {
celery: true
}
};
for (var prop in changeKitchen) {
if (kitchen[prop]) {
kitchen[prop]
[Object.keys(changeKitchen[prop])] = changeKitchen[prop]
[Object.keys(changeKitchen[prop])]
}
}
console.log(kitchen)
Post a Comment for "How Can I Merge Javascript Two Objects But Only Update Properties That Change"