Как сделать слияние двух JS-объектов?

191
14 января 2019, 23:10

Есть два JS-объекта, которые мне нужно слить так, чтобы получился либо уже готовый объект, где нет повторяющихся элементов, либо так, чтобы на выходе я получил объект только с теми "ключ: значение", которых нету в каком-то одном объекте, но есть в другом. Для этого есть spread-оператор в ES2018, но он, видимо, делает не слияние двух объектов, а слияние всех ключей и значений второго объекта в первый, что мне не совсем подходит:

let obj1 = { 
  obj_nested: { 
    obj12: 'value', 
    obj13: 'value' 
  } 
} 
 
let obj2 = { 
  obj_nested: { 
    obj12: 'value', 
    obj14: 'value' 
  } 
} 
 
let merged = {...obj1, ...obj2} 
console.log(merged)

Answer 1

Думаю, Вам подойдет данный метод

Но следует помнить про распространенность ES6 и IE

let obj1 = { 
  obj_nested: { 
    obj12: 'value', 
    obj13: 'value' 
  } 
} 
 
let obj2 = { 
  obj_nested: { 
    obj12: 'value', 
    obj14: 'value' 
  } 
} 
 
function deepMerge(...sources) { 
  let acc = {} 
  for (const source of sources) { 
    if (source instanceof Array) { 
      if (!(acc instanceof Array)) { 
        acc = [] 
      } 
      acc = [...acc, ...source] 
    } else if (source instanceof Object) { 
      for (let [key, value] of Object.entries(source)) { 
        if (value instanceof Object && key in acc) { 
          value = deepMerge(acc[key], value) 
        } 
        acc = { ...acc, [key]: value } 
      } 
    } 
  } 
  return acc 
} 
 
console.log(deepMerge(obj1, obj2));

READ ALSO
async-await непонятная строка

async-await непонятная строка

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

224
Подсчет скрытых элементов

Подсчет скрытых элементов

Есть фото галерея, она отображает 5 элементов, остальные скрыты при помощи свойства overflow : hiden, вопрос: как можно сделать подсчет и вывод числа...

167
Как из Django передать строку, математическое выражение, в JS?

Как из Django передать строку, математическое выражение, в JS?

Передаю с помощью шаблонизатора Jinja, данные из Django в JavaScriptКод выглядит примерно так:

146
Замена на map vue.js

Замена на map vue.js

Всем привет,как будет выглядеть функция ,если заменить на map?

169