星世界
编者:张叶星
发布时间:2021-06-18 13:25:01
// JS对象深度合并
export function deepMerge() {
  var src; var copyIsArray; var copy; var name; var options; var clone
  var target = arguments[0] || {} // 这里说明第一个参数其实空着也是可以的
  var i = 1
  var length = arguments.length
  var deep = true // 多层深复制的参数在这里

  // Handle a deep copy situation
  if (typeof target === 'boolean') {
    deep = target

    // skip the boolean and the target
    target = arguments[ i ] || {}
    i++
  }

  // Handle case when target is a string or something (possible in deep copy)
  if (typeof target !== 'object' && !typeof target === 'function') {
    target = {}
  }

  if (i === length) {
    target = this
    i--
  }

  for (; i < length; i++) {
    // Only deal with non-null/undefined values
    if ((options = arguments[ i ]) != null) {
      // Extend the base object
      for (name in options) {
        src = target[ name ]
        copy = options[ name ]

        // Prevent never-ending loop
        if (target === copy) {
          continue
        }

        // Recurse if we're merging plain objects or arrays
        if (deep && copy && (copy instanceof Object || (copyIsArray = (copy instanceof Array)))) {
          if (copyIsArray) {
            copyIsArray = false
            clone = src && src instanceof Array ? src : []
          } else {
            clone = src && src instanceof Object ? src : {}
          }

          // Never move original objects, clone them
          target[ name ] = deepMerge(deep, clone, copy) // 多层深复制的递归调用在这里

          // Don't bring in undefined values
        } else if (copy !== undefined) {
          target[ name ] = copy
        }
      }
    }
  }
  // Return the modified object
  return target
}
// 使用方法
deepMerge(source, target)




本文地址:
转载请著名出处,谢谢!
欢迎交流
QQ:419268793
编者:张叶星
发布时间:2021-06-18 13:25:01
用户名:
密码:
      本站的部分文章和图片来自互联网,特别鸣谢 “百度图片”、“笑话集 www.jokeji.cn ”等, 如果本站有某些文章或图片侵犯了您的权益,麻烦您告诉我,我会及时处理。谢谢!微笑
QQ:419268793