* 深度複製對象
* 1. srcStack / dstStack 爲了解決環對象的問題
*/
function clone(obj, srcStack = [], dstStack = []) {
const newObj = Object.create(Object.getPrototypeOf(obj));
srcStack.push(obj);
dstStack.push(newObj);
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const prop = obj[key];
if (typeof prop === 'object' && prop !== null) {
const index = srcStack.lastIndexOf(prop);
if (index > 0) {
newObj[key] = dstStack[index];
} else {
newObj[key] = clone(prop, srcStack, dstStack);
}
} else {
newObj[key] = prop;
}
}
return newObj;
}
var arr1={name:'cyt',data:[1,2,3,4,5]}; var result=cloneArray(arr1,true); result['data'][0]=3; console.log(arr1)