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 的話(huà),可以使用對(duì)象展開(kāi)運(yùn)算符來(lái)拷貝。
obj.a = [...arr]
相關(guān)文章:
1. mysql - sql 左連接結(jié)果union右連接結(jié)果,導(dǎo)致重復(fù)性計(jì)算怎么解決?2. javascript - 滾動(dòng)到指定高度 開(kāi)始輪流放動(dòng)畫(huà),QQPC官網(wǎng)就是這么做的,請(qǐng)問(wèn)使用什么開(kāi)源庫(kù)方便點(diǎn)?3. mysql 遠(yuǎn)程連接出錯(cuò)10060,我已經(jīng)設(shè)置了任意主機(jī)了。。。4. 默認(rèn)輸出類(lèi)型為json,如何輸出html5. 數(shù)組排序,并把排序后的值存入到新數(shù)組中6. php多任務(wù)倒計(jì)時(shí)求助7. mysql怎么表示兩個(gè)字段的差8. 怎么能做出標(biāo)簽切換頁(yè)的效果,(文字內(nèi)容隨動(dòng))9. PHP訂單派單系統(tǒng)10. MySQL的聯(lián)合查詢(xún)[union]有什么實(shí)際的用處
