一行程式碼徹底終結關於物件/陣列的深拷貝問題

zifeiyu發表於2019-11-23

看了無數關於物件,陣列深拷貝的方法,總結,各有各的問題。要麼過於複雜,並且只能處理特定的資料結構,要麼就是偽深拷貝。

今天,讓我們用一行程式碼終結物件/陣列的深拷貝問題。

深拷貝的難點

  • 你並不知道一個陣列或者物件巢狀的資料結構是什麼樣的,除非你使用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?
複製程式碼

總結

怎麼樣?是不是一行程式碼解決了所有的需求?管你七十二變,照妖鏡在手!

相關文章