Есть ли способ сделать это?
Если библиотеки npm можно использовать в качестве решения, object-merge-advanced от вас действительно позволяет объединить объекты глубоко и настроить / переопределить каждое действие слияния с помощью знакомой функции обратного вызова. Основная идея этого - не просто глубокое слияние - что происходит со значением, когда два ключа одинаковы ? Эта библиотека позаботится об этом - при столкновении двух клавиш
object-merge-advanced
весит типы, стремясь сохранить как можно больше данных после слияния:Ключ первого входного аргумента помечен # 1, второй аргумент - # 2. В зависимости от каждого типа один выбирается для значения ключа результата. В диаграмме «объект» означает простой объект (не массив и т. Д.).
Когда ключи не сталкиваются, все они вводят результат.
] Из вашего фрагмента примера, если вы использовали
object-merge-advanced
для объединения фрагмента кода:const mergeObj = require("object-merge-advanced"); const x = { a: { a: 1 } }; const y = { a: { b: 1 } }; const res = console.log(mergeObj(x, y)); // => res = { // a: { // a: 1, // b: 1 // } // }
Этот алгоритм рекурсивно пересекает все ключи входных объектов, сравнивает и строит и возвращает новый объединенный результат.