Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt giữa .extend()/.assign() và .merge() trong Lodash

_.assign / _.extend (alias) = **shallow merge**: copy property value as-is. Nested object **không merge đệ quy** — object source ghi đè object target.

_.merge = **deep merge**: đệ quy merge nested object property.

Ví dụ

const _ = require('lodash');
let destination = { a: { b: 1, c: 2 } };
let source = { a: { d: 2, c: 3 } };

console.log(_.merge(destination, source));
// { a: { b: 1, c: 3, d: 2 } } — deep merge: b giữ, c ghi đè, d thêm

console.log(_.extend(destination, source));
// { a: { d: 2, c: 3 } } — shallow: a bị replace hoàn toàn

Khi nào dùng cái nào?

  • assign/extend: Config flat, override toàn bộ object con.
  • merge: Config nested, muốn merge deep (ví dụ: default config + user config).

Lưu ý: Cả 2 đều **mutate destination object**. Muốn immutable: _.merge({}, dest, src) hoặc {...dest, ...src} (shallow).