bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Объединить объекты с обновлением значений?

Здравствуйте! Не подскажите, как правильно обьеденить 2 объекта, что бы значение обновлялись и добавлялись, а не перезатирались, как в примере с ключом "b" => "b2". Подскажите как лучше решить эту задачу?
obj1 = {a:1, b: {b1: 1, b2: 4}}
obj2 = {b: {b1: 2, b3: 3}, c:1 }
console.log(Object.assign(obj1, obj2));
// то что есть  --- { a: 1, b: { b1: 2, b3: 3 }, c: 1 }
// то что нужно ---{ a: 1, b: { b1: 2,  b2:4, b3: 3 }, c: 1 }
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 2
kulakoff
@kulakoff
Vue.js developing
В вашем случае вот так можно: https://codepen.io/kerf/pen/zwRQLm
Ответ написан
Комментировать
bogdan_uman
@bogdan_uman Автор вопроса
шлЫмазл неукЪ-поцЪ
Спасибо за ответы вот что удалось сотворить
isObject = (item) ->
  item and typeof item is 'object' and not Array.isArray item


mergeDeep = (target, source) ->

  if isObject(target) and isObject(source)
    Object.keys(source).forEach (key) ->
      if isObject source[ key ]
        if not target[key] then Object.assign target, { "#{key}": {} }
        mergeDeep target[ key ], source[ key ]
      else
        Object.assign target, { "#{key}": source[key] }
  target


obj1 = {a:1, b: {b1: 1, b2: 4}}
obj2 = {b: {b1: 2, b3: {b11:4, b21:3}}, c:{c1: {c12: 5} } }
console.log(mergeDeep(obj1, obj2));

###
{ a: 1,
  b: { b1: 2, b2: 4, b3: { b11: 4, b21: 3 } },
  c: { c1: { c12: 5 } } }
###
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы