@seriych

Как добавить отсутствующие свойства объекта произвольной вложенности, присутствующие в другом?

Есть два объекта со свойствами произвольной вложенности:
- объект-пациент, в котором часть свойств указаны, а часть нет;
- объект-донор, в котором тоже часть свойств указаны, а часть нет.
Нужно у объекта-пациента оставить как есть все свойства нижних уровней вложенности и добавить свойства, которых у него нет, если таковые имеются в объекте доноре.

// Пример
var donor = {
    a: 1,
    b: 2,
    d: {aa: 1, bb: 2},
    e: {aa: 1, bb: {aaa: 1, bbb: 2}}
    f: {aa: 1, bb: {aaa: 1, bbb: 2}}
};
var patient = {
    a: 7,
    c: 8,
    d: {bb: 7, cc: 8},
    e: {aa: 7},
    f: {bb: {aaa: 8}}
};

magic(); // Магия
/*
// После применения магии
patient = {
    a: 7,
    b: 2,
    c: 8,
    d: {aa: 1, bb: 7, cc: 8},
    e: {aa: 7, bb: {aaa: 1, bbb: 2}},
    f: {aa: 1, bb: {aaa: 8, bbb: 2}}
};
*/
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const extend = (target, source) => Object
  .entries(source instanceof Object ? source : {})
  .reduce((acc, [ k, v ]) => {
    acc[k] = v instanceof Object ? extend(acc[k], v) : k in acc ? acc[k] : v;
    return acc;
  }, target instanceof Object ? target : {});


extend(patient, donor);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Рекурсия + Object.assign
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы