Milk+ea

Weblog Is My Hobby.

Lodashのdefaultsとassign

Lodashのdefaultsとassign

よくdefaultsassignがよく分からなくなるんです。

defaults

引数にはオブジェクトを2つ指定します。
最初のオブジェクトに、2つ目のプロパティを追加したものを返します。 ただし、最初のオブジェクトに存在するプロパティ以外!

var obj = {
  first: 1,
  second: 2
}

console.log(_.defaults(obj, {first: 9}));
// 9にはならない
// -> [object Object] {
//      first: 1,
//      second: 2
//    }

console.log(_.defaults(obj, {third: 3}));
// thirdが追加される
// -> [object Object] {
//      first: 1,
//      second: 2,
//      third: 3
//    }

console.log(obj);
// obj自体が更新される
// -> [object Object] {
//      first: 1,
//      second: 2,
//      third: 3
//    }

最初のオブジェクト自体が更新されるので少し注意。

assign

一方assignは、 最初のオブジェクトに存在するプロパティ値を2つ目のプロパティ値で上書きします。

var obj = {
  first: 1,
  second: 2
}

console.log(_.assign(obj, {first: 9, third:3}));
// firstが上書きされて、thirdが追加される
// -> [object Object] {
//      first: 9,
//      second: 2,
//      third: 3
//    }

console.log(obj);
// obj自体が更新
// -> [object Object] {
//      first: 9,
//      second: 2,
//      third: 3
//    }

もう一々検索しない。