Lodash - разница между .extend () / .assign () и .merge ()

Большинство дистрибутивов Linux поставляются с предустановленным Python. Использование Docker здесь добавляет значительную сложность, и я бы настоятельно рекомендовал Docker не запускать простой скрипт. Вы можете использовать виртуальную среду , чтобы изолировать зависимости конкретного пакета Python от остальной системы.

(Существует довольно непротиворечивый поток вопросов SO о получении прав файловой системы и идентификаторов пользователей для сценариев, которые в основном хотят взаимодействовать с хост-системой. Также помните, что при выполнении docker все подразумевает права, эквивалентные корневым. вам не нужна файловая система Docker и изоляция пространства имен пользователя, IMHO, проще просто не использовать Docker там, где это не имеет смысла.)

444
задан 17.05.2020, 06:25

3 ответа

Если вы хотите глубокое копирование без переопределения при сохранении той же obj ссылки

obj = _.assign(obj, _.merge(obj, [source]))

1
ответ дан 17.05.2020, 06:26

Другим отличием, на которое следует обратить внимание, является обработка значений undefined:

mergeInto = { a: 1}
toMerge = {a : undefined, b:undefined}
lodash.extend({}, mergeInto, toMerge) // => {a: undefined, b:undefined}
lodash.merge({}, mergeInto, toMerge)  // => {a: 1, b:undefined}

Таким образом, merge не объединит значения undefined в определенные значения.

74
ответ дан 17.05.2020, 06:27

Также было бы полезно рассмотреть то, что они делают с семантической точки зрения:

_.assign

   will assign the values of the properties of its second parameter and so on,
   as properties with the same name of the first parameter. (shallow copy & override)

_.merge

   merge is like assign but does not assign objects but replicates them instead.
  (deep copy)

_.defaults

   provides default values for missing values.
   so will assign only values for keys that do not exist yet in the source.

_.defaultsDeep

   works like _defaults but like merge will not simply copy objects
   and will use recursion instead.

Я считаю, что научиться думать об этих методах с семантической точки зрения позволит вам лучше «угадать», что будет поведение для всех различных сценариев существующих и несуществующих ценностей.

20
ответ дан 17.05.2020, 06:28

Теги

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