最近想全職當碼農,面試時候被問到了深拷貝,我噼裏啪啦說了一通,感受很牛逼,問我本身寫過沒有,我說沒有,可是我能夠寫。其實我很心虛,估計現場寫會卡殼。。。。。
首先能夠寫一個殼子函數,包裹一個將要反覆遞歸調用自身的函數。面試
function deepCopy(obj) { const handleDeepCopy = obj=>{ const clonedObj = obj instanceof Array? []:{} return clonedObj } return handleDeepCopy(obj) }
clonedObj就是即將克隆返回的新對象
從此會這麼使用它:let newobj = deepCopy(oldobj)
newobj就是通過深拷貝的新對象,這樣在操做newobj的時候就不會對oldobj產生干擾了數組
接着完善遞歸拷貝邏輯。函數
若是不是引用型,直接將clonedObj對應的property賦值爲obj[property]。code
function deepCopy(obj) { const handleDeepCopy = obj=>{ const clonedObj = obj instanceof Array? []:{} // add for in logic here for (let keyOrIndex in obj) { if(obj[keyOrIndex] instanceof Object) { clonedObj[keyOrIndex] = handleDeepCopy(obj[keyOrIndex]) } else { clonedObj[keyOrIndex] = obj[keyOrIndex] } } // for in logic over return clonedObj } return handleDeepCopy(obj) }