如何在Javascript中深度復(fù)制嵌套對(duì)象
所以你有一個(gè)嵌套對(duì)象,假設(shè)你需要將其復(fù)制到與原始變量完全不同的另一個(gè)變量。
我們今天過得怎么樣?
原物:
const obj1 = {name: ‘John Smith’, 地址: {mailing: {line1: ‘地址行 1’, line2: ‘地址行 2′, city:’紐約’}}};
復(fù)制對(duì)象:
方法一:
使用擴(kuò)展運(yùn)算符
const obj2 = {…obj1};
方法二:
有些人甚至更喜歡昂貴的操作:
const obj2 = JSON.parse(JSON.stringify(obj1));
方法 1 的問題是擴(kuò)展運(yùn)算符在沒有引用的情況下復(fù)制對(duì)象,但它不會(huì)對(duì)嵌套對(duì)象執(zhí)行此操作,例如為 obj1 的地址鍵。所以改變 obj2.address.line1 也會(huì)改變 obj1.address.line1。
而方法2看起來(lái)就是錯(cuò)誤且昂貴。
那么我們?cè)撛趺醋瞿兀?br />
答案:
const obj2 = StructuredClone(obj1);
現(xiàn)在你已經(jīng)創(chuàng)建了 obj1 的深層副本,并且 obj1 和 obj2 是完全不同的對(duì)象。
注意: StructuredClone() 方法是新推出的方法,可能無(wú)法在 2022 年 3 月之前的瀏覽器中運(yùn)行。
這是我的第一篇文章。請(qǐng)發(fā)表評(píng)論并聯(lián)系,讓我知道我可以在下一篇文章中做得更好。
謝謝!!!