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

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

不可變方法在 lodash fp 中如何工作?

不可變方法在 lodash fp 中如何工作?

收到一只叮咚 2023-09-14 17:54:32
我想了解 lodash/fp 的不可變方法是如何工作的。他們是否在更改集合之前深度克隆集合,或者是否在對(duì)象的兩個(gè)版本之間實(shí)現(xiàn)某種結(jié)構(gòu)共享?我試圖“從外部”理解它,但無(wú)法得出明確的結(jié)論。在下面的第一種情況下,更改更新的集合不會(huì)影響原始集合。然而,在第二種情況下,改變更新的集合確實(shí)會(huì)影響原始集合。var fp = _.noConflict();var data = { a: { c: {} } };var updatedData = fp.set(["a", "c", "d"], 5, data);updatedData.a.c.e = 9;console.log(updatedData.a.c.e, data.a.c.e);var data2 = { a: { c: [] } };var updatedData2 = fp.set(["a", "d"], 5, data2);updatedData2.a.c[0] = 9;console.log(updatedData2.a.c[0], data2.a.c[0]);<script src='https://cdn.jsdelivr.net/g/lodash@4.17(lodash.min.js+lodash.fp.min.js)'></script>我還在Lodash github上發(fā)布了這個(gè)問(wèn)題。
查看完整描述

1 回答

?
米琪卡哇伊

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

他們是否在更改集合之前深度克隆集合,或者是否在對(duì)象的兩個(gè)版本之間實(shí)現(xiàn)某種結(jié)構(gòu)共享?


是的,他們使用結(jié)構(gòu)共享。


我們可以在這個(gè)例子中看到該c對(duì)象被重用,而不是克隆。這很有用,因?yàn)樗拇笮】赡芊浅4螅ㄔ谖业睦又兴麄€(gè)window對(duì)象?。?/p>

您可以想象嘗試深度克隆它會(huì)浪費(fèi)資源。


var fp = _.noConflict()

var data, updatedData



data = { a: { c: { window: window } } }

updatedData = fp.set(["a", "d"], 5, data)

console.log(updatedData.a.c === data.a.c)

<script src='https://cdn.jsdelivr.net/g/lodash@4.17(lodash.min.js+lodash.fp.min.js)'></script>


只有“父”對(duì)象被更改,因此必須克隆它們。不屬于突變一部分的葉子不需要改變。


在您的示例中,它出錯(cuò)的原因是因?yàn)槟M合了不可變和可變代碼,這不是一個(gè)好主意。如果您改變了預(yù)期不可變的代碼,這些克隆優(yōu)化顯然會(huì)出錯(cuò)。


查看完整回答
反對(duì) 回復(fù) 2023-09-14
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報(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)