循環引用有人說就是一種不健康的狀態,即你中有我,我中有你
hasObj: any = [];
deepCopy(data: any) {
this.hasObj.push(data);
//最終就是返回數組或者對象
let t = this.type(data),
o: any,
i,
ni;
if (t === "array") {
o = []; //初始化
} else if (t === "object") {
o = {}; //初始化
} else {
return data;
}
if (t === "array") {
//console.log("t:%o,data:%o", t, data);
for (i = 0, ni = data.length; i < ni; i++) {
// if (data[i] == undefined) {
// break;
// }
o.push(this.deepCopy(data[i]));
}
return o;
} else if (t === "object") {
//console.log("t:%o,data:%o", t, data);
for (i in data) {
let index = this.hasObj.indexOf(data[i]);
if (index > -1) {
console.log("存在循環引用或屬性引用了相同對象");
// 如果已存在,證明引用了相同對象,那么無論是循環引用還是重復引用,我們返回引用就可以了
o[i] = this.hasObj[index];
} else {
o[i] = this.deepCopy(data[i]);
}
}
return o;
}
}
