深拷贝工具函数实现

80 阅读1分钟

个人深拷贝工具函数

const hashMap = {
  "[object Number]": (value) => value,
  "[object String]": (value) => value,
  "[object Null]": (value) => value,
  "[object Undefined]": (value) => value,
  "[object Boolean]": (value) => value,
  "[object Array]": (value) => deepArrClone(value),
  "[object Object]": (value) => deepObjectClone(value),
  "[object Map]": (value) => deepMapClone(value),
  "[object Set]": (value) => deepSetClone(value),
}
function deepObjectClone(obj) {
  const newObj = {}
  for (keys in obj) {
    const value = obj[keys]
    const type = Object.prototype.toString.call(value)
    newObj[keys] = hashMap[type](value)
  }
  return newObj
}
function deepArrClone(arr) {
  const newArr = new Array(arr.length)
  for (let i = 0; i < arr.length; i++) {
    const value = arr[i]
    const type = Object.prototype.toString.call(value)
    newArr[keys] = hashMap[type](value)
  }
  return newArr
}
function deepMapClone(map) {
  const newMap = new Map()
  map.forEach((values, keys) => {
    const type = Object.prototype.toString.call(values)
    newMap.set(keys, hashMap[type](values))
  })
  return newMap
}
function deepSetClone(set) {
  const newSet = new Set()
  set.forEach(value => {
    const type = Object.prototype.toString.call(item)
    newSet.add(hashMap[type](value))
  })
  return newSet
}