js 深拷贝

Posted vant850

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 深拷贝相关的知识,希望对你有一定的参考价值。

对于深拷贝 一直使用的都是 JSON 和 lodash 的方法, 今天空下来自己手写个 深拷贝方法, 把想到的一些情况, 包括对 函数、Symbol、正则、日期对象 都做了处理。 基本上满足了了日常需求。代码如下:

// 深拷贝
function deepClone(arg) 

  let typeIncludes = ['string', 'boolean', 'number', 'undefined'] // 基础类型
  let redundanceIncludes = ['null', 'symbol', 'function', 'regexp', 'date'] // 冗余类型

  let typeObject = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()

  function dealArray(item) 
    let arr = item.map( i => 
      return deepClone(i)
     )
    return arr
  

  function dealObject(obj) 
    let newObj = 
    for (const key in obj) 
      newObj[key] = deepClone(obj[key])
    
    return newObj
  

  if(typeIncludes.includes(typeObject(arg)) || redundanceIncludes.includes(typeObject(arg)) ) return arg

  return typeObject(arg) === 'array' ? dealArray(arg) : dealObject(arg)
  

有不足的地方, 还请评论区留言????

以上是关于js 深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 深拷贝对象

js实现深拷贝

js中的深拷贝与浅拷贝

js深拷贝和浅拷贝区别,以及实现深拷贝的方式

JS深拷贝与浅拷贝的区别,实现深拷贝的几种方法

JS深拷贝与浅拷贝