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 遇到相同屬性名的時候,如果屬性值是純對象或集合的時候,會合並屬性值

  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM