法一:使用lodash
npm i --save lodash
const _ = require('lodash');
console.log(_.cloneDeep(list));
法二:手动写个共通方法
public static clone(target: any): any {
if (target == null) {
return null;
}
if (target instanceof Date) {
return value;
}
if (!(target instanceof Array) && !(typeof target === 'object')) {
return value;
}
const cloneObject = new target.constructor();
Object.keys(target).forEach(
(attr: string) => {
cloneObject[attr] = (typeof target[attr] === 'object') ? this.clone(target[attr]) : target[attr];
}
);
return cloneObject;
}
法三:递归
function each(obj, cb) {
if (obj) {
if (Array.isArray(obj)) {
obj.forEach(cb);
} else {
Object.keys(obj).forEach(key => {
cb(obj[key], key);
});
}
}
}
function cloneDeep(obj, preserveUndefined) {
if (preserveUndefined === undefined) {
preserveUndefined = true;
}
let clone;
if (obj === null) {
return null;
}
if (obj instanceof Date) {
return obj;
}
if (obj instanceof Array) {
clone = [];
} else if (typeof obj === 'object') {
clone = {};
} else {
return obj;
}
each(obj, (value, name) => {
if (value !== undefined) {
clone[name] = cloneDeep(value, preserveUndefined);
} else if (preserveUndefined) {
clone[name] = undefined;
}
});
return clone;
}
module.exports = { each, cloneDeep };