第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在Javascript中克隆對(duì)象數(shù)組?

如何在Javascript中克隆對(duì)象數(shù)組?

慕尼黑8549860 2019-06-17 15:34:00
如何在Javascript中克隆對(duì)象數(shù)組?.每個(gè)對(duì)象也有對(duì)同一數(shù)組中其他對(duì)象的引用?當(dāng)我第一次提出這個(gè)問(wèn)題的時(shí)候,我只是想到var clonedNodesArray = nodesArray.clone()將存在并搜索有關(guān)如何在javascript中克隆對(duì)象的信息。我確實(shí)找到了問(wèn)題關(guān)于StackOverflow(由相同的@JohnResig回答),他指出使用jQuery可以做到var clonedNodesArray = jQuery.extend({}, nodesArray);克隆物體。不過(guò),我嘗試過(guò)這樣做,它只復(fù)制數(shù)組中對(duì)象的引用。所以如果我nodesArray[0].value = "red"clonedNodesArray[0].value = "green"nodesArray[0]和clonedNodesArray[0]的值將變成“綠色”。然后我試著var clonedNodesArray = jQuery.extend(true, {}, nodesArray);深層次復(fù)制一個(gè)物體,但我得到了“太多遞歸“和”控制堆棧溢出“分別來(lái)自Firebug和Opera蜻蜓的消息。你會(huì)怎么做?這難道是不該做的事嗎?在Javascript中有可重用的方法嗎?
查看完整描述

3 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

淺拷貝的問(wèn)題是,所有對(duì)象都不是克隆的。雖然對(duì)每個(gè)對(duì)象的引用在每個(gè)數(shù)組中都是唯一的,但是一旦您最終抓住它,您將處理與前面相同的對(duì)象。你克隆它的方式?jīng)]什么不對(duì)的.使用Array.Slice()也會(huì)出現(xiàn)同樣的結(jié)果。

深拷貝出現(xiàn)問(wèn)題的原因是,您最終得到了循環(huán)對(duì)象引用。深度會(huì)越深越好,如果你有一個(gè)圓圈,它就會(huì)無(wú)止境地前進(jìn),直到瀏覽器昏倒。

如果數(shù)據(jù)結(jié)構(gòu)不能表示為有向無(wú)圈圖,那么我不確定您是否能夠找到一種通用的深入克隆方法。循環(huán)圖提供了許多棘手的角落情況,而且由于它不是一個(gè)常見(jiàn)的操作,我懷疑沒(méi)有人寫過(guò)完整的解決方案(如果可能的話-可能不是!)但我現(xiàn)在沒(méi)有時(shí)間試著寫一份嚴(yán)格的證據(jù)。)我在這個(gè)問(wèn)題上找到了一些很好的評(píng)論本頁(yè).

如果您需要一個(gè)帶有循環(huán)引用的數(shù)組對(duì)象的深度副本,我相信您將不得不編寫自己的方法來(lái)處理您的專用數(shù)據(jù)結(jié)構(gòu),這樣它就是一個(gè)多通道克隆:

  1. 在第一輪中,克隆不引用數(shù)組中其他對(duì)象的所有對(duì)象。跟蹤每個(gè)物體的起源。
  2. 在第二輪中,將物體連接在一起。


查看完整回答
反對(duì) 回復(fù) 2019-06-17
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

只要您的對(duì)象包含JSON可序列化的內(nèi)容(沒(méi)有函數(shù),沒(méi)有Number.POSITIVE_INFINITY等等)不需要任何循環(huán)來(lái)克隆數(shù)組或?qū)ο?。這是一個(gè)純香草單線解決方案。

var clonedArray = JSON.parse(JSON.stringify(nodesArray))

總結(jié)下面的注釋,這種方法的主要優(yōu)點(diǎn)是它還克隆了數(shù)組的內(nèi)容,而不僅僅是數(shù)組本身。主要的缺點(diǎn)是它只在JSON可序列化的內(nèi)容上工作的限制,以及它的性能(這比slice基礎(chǔ)辦法)。


查看完整回答
反對(duì) 回復(fù) 2019-06-17
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

我解決了一個(gè)對(duì)象數(shù)組的克隆對(duì)象.分配

const newArray = myArray.map(a => Object.assign({}, a));

或者更短擴(kuò)展語(yǔ)法

const newArray = myArray.map(a => ({...a}));


查看完整回答
反對(duì) 回復(fù) 2019-06-17
  • 3 回答
  • 0 關(guān)注
  • 712 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)