阅读 3079

一行代码彻底终结关于对象/数组的深拷贝问题

看了无数关于对象,数组深拷贝的方法,总结,各有各的问题。要么过于复杂,并且只能处理特定的数据结构,要么就是伪深拷贝。

今天,让我们用一行代码终结对象/数组的深拷贝问题。

深拷贝的难点

  • 你并不知道一个数组或者对象嵌套的数据结构是什么样的,除非你使用TS,提前定义一个对象的接口格式。
  • 即使你知道了对象的格式,那么也将会面临复杂的循环嵌套问题,并且由于 js 并不阻止用户灵活的改变数据结构和数据类型,你永远不知道会发生什么。

终极解决方案

还记得你跟后端进行交互的时候要穿复杂的json数据结构到后端使用了什么方式么?先把对象昂转成 JSON 字符串。就是这个东西JSON 字符串,拯救普陀大众,深藏功与名。它还有两个得力助手,左膀右臂。JSON.parse()JSON.Stringify()

对象

let demo1 = {a: 1, b: 2, c: {c1: [1,2,3]}}
let demo2 = JSON.parse(JSON.Stringify(demo1))
// 试一下,看看是不是 demo2无乱如何改变都不会影响 demo1?
复制代码

数组

let arr1 = [1,{a: 1, b:2}, [3,4,5]]
let arr2 = [].concat(JSON.parse(JSON.Stringify(arr1)))
// 试一下,看看是不是 arr2无乱如何改变都不会影响 arr1?
复制代码

总结

怎么样?是不是一行代码解决了所有的需求?管你七十二变,照妖镜在手!

关注下面的标签,发现更多相似文章
评论