function deepCopy(x) {
const root = {};
const loopList = [{
parent: root,
key: undefined,
data: x
}];
if (Array.isArray(x)) {
var isArr = true;
}
while (loopList.length) {
const node = loopList.pop();
const parent = node.parent;
const key = node.key;
const data = node.data;
var res = parent;
if (typeof key !== 'undefined') {
res = parent[key] = {};
}
if (Array.isArray(data)) {
res = parent[key] = [];
}
for (let k in data) {
if (data.hasOwnProperty(k)) {
if (typeof data[k] == 'object') {
loopList.push({
parent: res,
key: k,
data: data[k],
});
} else {
res[k] = data[k];
}
}
}
}
if (isArr) {
return root.undefined;
}
return root;
};
var a = {
k: 1,
b: 2,
c: ["a", {
k: 1,
b: 2,
c: ["a", "b"]
}]
};
var b = deepCopy(a);
b.c[1].c[1] = 455;
console.log(b);
console.log(a);