lodash中extend,assign,merge的異同

lodash中extend,assign,merge的異同

assign(
{},
{ a: 1 },
{ b: { c: 2, d: 3} },
{ b: { e: 4 } }
)
// { a: 1, b: { e: 4 } }
merge(
{},
{ a: 1 },
{ b: { c: 2, d: 3} },
{ b: { e: 4 } }
)
// { a: 1, b: { c: 2, d: 3, e: 4 } }
 
// 合併集合
var users = {
'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
};
var ages = {
'data': [{ 'age': 36 }, { 'age': 40 }]
};
merge({}, users, ages)
// { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ] }
 
// merge 函數會修改原來的對象!
merge(users, ages)
console.log(users) // { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ]

總結

相同之處

  • 都可以用來合併對象
  • 都會修改原來的對象 (如果原來的對象是作爲函數的第一個參數的話)

不同之處

  • assign 函數不會處理原型鏈上的屬性,也不會合並相同的屬性,而是用後面的屬性值覆蓋前面的屬性值

  • extend

    • 3.x 版本中和 assign 一樣
    • 4.x 版本中會合並原型鏈上的屬性
  • merge 遇到相同屬性名的時候,如果屬性值是純對象或集合的時候,會合並屬性值

  •  

posted @ 2017-07-28 16:52 General_up 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章