Newer
Older
CloudBrainNew / src / utils / index.js
StephanieGitHub on 4 Feb 2021 1 KB first commit

export function deepMerge (target, merged) {
  for (var key in merged) {
    if (target[key] && typeof (target[key]) === 'object') {
      deepMerge(target[key], merged[key])
      continue
    }
    target[key] = merged[key]
  }
  return target
}
// 防抖
export function debounce (delay, callback) {
  let lastTime
  return function () {
    clearTimeout(lastTime)
    const [that, args] = [this, arguments]
    lastTime = setTimeout(() => {
      callback.apply(that, args)
    }, delay)
  }
}

export function observerDomResize (dom, callback) {
  // 监听dom树变化
  const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
  const observer = new MutationObserver(callback)
  observer.observe(dom, { attributes: true, attributeFilter: ['style'], attributeOldValue: true })
  return observer
}

export function deepClone (object) {
  // 是否需要递归
  var recursion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false
  if (!object) return object
  const parse = JSON.parse
  const stringify = JSON.stringify
  if (!recursion) return parse(stringify(object))
  var clonedObj = object instanceof Array ? [] : {}

  if (object && typeof (object) === 'object') {
    for (var key in object) {
      if (object.hasOwnProperty(key)) {
        if (object[key] && typeof (object[key]) === 'object') {
          clonedObj[key] = deepClone(object[key], true)
        } else {
          clonedObj[key] = object[key]
        }
      }
    }
  }
  return clonedObj
}