shakiriker
@shakiriker

Как объединить два объекта в один с одинаковыми именами свойств?

вот мой пример

const obj1 = {
  ok: {
    Duko: { d: { dd: "dd", ff: "ff" }, k: { dd: "dd" } }
    //...
  }
};

const obj2 = {
  ok: {
    Duko: { d: { dd: "dd", ff: "ff" }, k: { ff: "ff" } }
    //...
  }
};

// const obj3 = merge(obj1,obj2,...);

const obj3 = {
  ok: {
    Duko: {
      d: { dd: () => null, ff: () => null },
      k: { dd: "dd", ff: "ff" }
    }
    //...
  }
};


если оба объекта будут иметь одно и то же свойство с разным значением тогда значение должно быть ()=>null.

Функция может принимать сколько угодно объектов.

Hет никаких ограничений по свойствам объектов.

Как написать функцию merge ?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Воспользоваться уже написанной, и хорошо оттестированной: mergeWith.
Примерно так:
import { isObject, isUndefined, mergeWith } from 'lodash';

export function merge(...args) {
  return mergeWith(...args, (a, b) => {
    if(
      !(isObject(a) && isObject(b)) // хотя бы один не объект
      && !(isUndefined(a) || isUndefined(b)) // оба заданы
      && a !== b // не равны
    ) return () => null
  });
}
Возможно там потребуются ещё какие-то проверки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект