javascript - js 對(duì)象深拷貝和賦值
問題描述
代碼中得到一個(gè)數(shù)組arr=[1,2,3];因?yàn)轳R上會(huì)被銷毀,所以不能直接賦值給對(duì)象Obj.a,請(qǐng)問這種情況jquery如何寫,使得arr銷毀之后Obj.a=[1,2,3]?
問題解答
回答1:一般情況下很少會(huì)在 JS 中遇到“銷毀”。然后,我不明白你所謂的立即銷毀是指什么?
如果是指 delete arr,那么直接賦值也不會(huì)有問題,如下圖:

如果你是要改變 arr 的內(nèi)容。那么可以復(fù)制一個(gè)數(shù)組(有幾種方法,concat 只是其中一種)
Obj.a = [].concat(arr);
如果確實(shí)需要深拷貝,jQuery.fn.clone(),不過貌似有一些限制。
如果其它數(shù)據(jù),自己寫深拷貝還是有點(diǎn)難度也比較麻煩,不如用 Lodash 的 cloneDeep()
回答2:拷貝數(shù)組:
利用 sliceobj.a = arr.slice();

obj.a = JSON.parse( JSON.stringify(arr));

沒看懂你銷毀的意思。。。。至于深拷貝:
function cloneObj(obj){ if( !obj || typeof obj == 'string' ){return obj; } else if ( obj instanceof Array ){return [].concat(obj); } else {var tempObj = {};for( var key in obj ){ tempObj[key] = cloneObj(obj[key]);}return tempObj; }}回答4:
如果你使用 ES2015 的話,可以使用對(duì)象展開運(yùn)算符來拷貝。
obj.a = [...arr]
相關(guān)文章:
1. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?2. docker不顯示端口映射呢?3. docker-compose中volumes的問題4. golang - 用IDE看docker源碼時(shí)的小問題5. 在windows下安裝docker Toolbox 啟動(dòng)Docker Quickstart Terminal 失敗!6. javascript - 最近用echarts做統(tǒng)計(jì)圖時(shí)遇到兩個(gè)問題!!7. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””8. mac里的docker如何命令行開啟呢?9. javascript - 連續(xù)點(diǎn)擊觸發(fā)mouseleave事件10. docker內(nèi)創(chuàng)建jenkins訪問另一個(gè)容器下的服務(wù)器問題

網(wǎng)公網(wǎng)安備