function deepClone1(o) {
let result = {};
// 栈
let loopList = [
{
parent: result,
key: undefined,
data: o,
},
];
while (loopList.length) {
let node = loopList.pop();
let { parent, key, data } = node; //解构赋值
let res = null;
if (typeof key === "undefined") {
// 如果 key 等于 undefined,将 parent值赋给 res,初始化对象容器
res = parent;
} else {
// key不是undefined说明已经进入对象的循环,初始化对象容器
res = parent[key] = {}; // 将 parent[key] 值赋给 res,并初始化为 {},这个时候 res代表的是 result 里面存储的一个对象
}
for (let i in data) {
if (isObject(data[i])) {
//是对象的话存入栈中,等到下次循环时,将里面的数据取出来判断再赋值,如此循环
loopList.push({
parent: res,
key: i,
data: data[i],
});
} else {
res[i] = data[i]; //不是对象的话直接赋值
}
}
console.log("result==>", result);
}
return result;
}
const a1 = {
a: 1,
b: 2,
c: { c1: 3, c2: { c21: 4, c22: 5 } },
d: "asd",
e: { c4: 3, c5: { c51: 4, c52: 5 } },
};
let cloneA1 = deepClone1(a1);
console.log(cloneA1.c.c1 === a1.c.c1);// false
【JavaScript】深克隆使用while实现
最新推荐文章于 2022-09-19 11:01:27 发布