我怎样才能在数组对象Typescript中深度克隆数组对象

时间:2017-04-26 15:44:23

标签: typescript ecmascript-6 underscore.js arrayobject

我需要通过使用typescript克隆数组对象中的数组对象来更改深属性中的某些值但是当我克隆它时它最后引用

dokey(xData : any) {
        _.keys(xData).forEach((x: any) => {
            xData[x] = _.isArray(xData[x]) ? this.duplicateArray(xData[x]) : xData[x];
        });
        return xData;
    }

duplicateArray(content: Object[]) {
    let arr: any = [];
    content.forEach((x: any) => { 
        arr.push(Object.assign({}, this.dokey(x) ));
    })
    return arr;
}

mainFunc() {
    let var1: any = [{ a: [{ q: '99' }, { w: '98' }] }, { b: '2' }];
    let var2 = this.duplicateArray(var1);
    var2[0].a[0].q = 'a002';
    console.log(var1, var2);
}

它应该不重复但重复

enter image description here

我该怎么做深度克隆呢?

1 个答案:

答案 0 :(得分:1)

如果原始对象是可序列化的,您只需执行以下操作:

function deepcopy<T>(o: T): T {
  return JSON.parse(JSON.stringify(o));
}

请注意,您无法可靠地复制某些内容,例如函数(因为它们可能会捕获闭包中的变量)。

更多

相同的视频课程:https://egghead.io/lessons/typescript-deep-copy-aka-clone-objects-using-typescript