a = {
a: 'hello',
b: 'hello',
c: {
ca: 'hello',
cb: 'hello',
cc: 'Нужно сохранить'
}
};
b = {
a: 'new value',
b: 'new value',
c: {
ca: 'new value',
cb: 'new value',
}
};
c = {
a: 'new value',
b: 'new value',
c: {
ca: 'new value',
cb: 'new value',
cc: 'Нужно сохранить'
}
};
for (let key in b) {
/* Глубокое обновление кроме потомков */
if (key === 'c') {
for (let i = 0; i < b[key].length; i++) {
for (let key2 in b[key][i]) {
a[key][i][key2] = b[key][i][key2];
}
}
continue;
}
/**/
a[key] = b[key];
}
const deepMerge = (a, b, howDeep = 1000) => {
a = {...a}
Object.entries(b).forEach(([key, value]) => {
if (typeof value !== 'object' || howDeep < 1) {
a[key] = value
} else {
a[key] = deepMerge(a[key], value, howDeep - 1)
}
})
return a;
}
const c = deepMerge(a, b)
console.log(c)