js克隆對象或數組

/**
 * 深度複製對象
 * 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)













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章