zoukankan      html  css  js  c++  java
  • 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 遇到相同属性名的时候,如果属性值是纯对象或集合的时候,会合并属性值

  • 相关阅读:
    委托理解
    WebForm与MVC模式优缺点
    关系型数据库与NOSQL
    抽象类与接口
    Asp.net中的状态保持方案
    数据库[约束]笔记
    xml文件操作
    String、Path、File、Directroy 常用方法总结
    面向对象5个基本设计原则
    面向对象分析与设计
  • 原文地址:https://www.cnblogs.com/General-up/p/7251198.html
Copyright © 2011-2022 走看看