javascript - js 對(duì)象深拷貝和賦值
問(wèn)題描述
代碼中得到一個(gè)數(shù)組arr=[1,2,3];因?yàn)轳R上會(huì)被銷(xiāo)毀,所以不能直接賦值給對(duì)象Obj.a,請(qǐng)問(wèn)這種情況jquery如何寫(xiě),使得arr銷(xiāo)毀之后Obj.a=[1,2,3]?
問(wèn)題解答
回答1:一般情況下很少會(huì)在 JS 中遇到“銷(xiāo)毀”。然后,我不明白你所謂的立即銷(xiāo)毀是指什么?
如果是指 delete arr,那么直接賦值也不會(huì)有問(wèn)題,如下圖:
如果你是要改變 arr 的內(nèi)容。那么可以復(fù)制一個(gè)數(shù)組(有幾種方法,concat 只是其中一種)
Obj.a = [].concat(arr);
如果確實(shí)需要深拷貝,jQuery.fn.clone(),不過(guò)貌似有一些限制。
如果其它數(shù)據(jù),自己寫(xiě)深拷貝還是有點(diǎn)難度也比較麻煩,不如用 Lodash 的 cloneDeep()
回答2:拷貝數(shù)組:
利用 sliceobj.a = arr.slice();
obj.a = JSON.parse( JSON.stringify(arr));
沒(méi)看懂你銷(xiāo)毀的意思。。。。至于深拷貝:
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ì)象展開(kāi)運(yùn)算符來(lái)拷貝。
obj.a = [...arr]
相關(guān)文章:
1. android - rxjava merge 返回Object對(duì)象數(shù)據(jù)如何緩存2. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????3. angular.js - ionic2 瀏覽器跨域問(wèn)題4. python - Scrapy存在內(nèi)存泄漏的問(wèn)題。5. javascript - 螞蟻金服里的react Modal方法,是怎么把元素插入到頁(yè)面最后的6. mysql 一個(gè)sql 返回多個(gè)總數(shù)7. 如何用筆記本上的apache做微信開(kāi)發(fā)的服務(wù)器8. docker-compose中volumes的問(wèn)題9. CSS3 畫(huà)如下圖形10. java - 三位二進(jìn)制表示8進(jìn)制,四位二進(jìn)制表示16進(jìn)制,那么多少二進(jìn)制表示10進(jìn)制呢?
