深度克隆对象

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何在 JavaScript 中创建对象的深度克隆。我们将使用递归克隆原始值、数组和对象,同时排除类实例。在本实验结束时,你将能够创建对象的完整副本而不改变原始对象。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 92%。获得了学习者 100% 的好评率。

对象深度克隆的操作指南

要深度克隆一个对象,请按以下步骤操作:

  1. 创建一个新的终端/SSH 实例,输入node以开始练习编码。
  2. 使用递归来克隆原始值、数组和对象,但不包括类实例。
  3. 检查传入的对象是否为null,如果是,则返回null
  4. 使用Object.assign()和一个空对象({})来创建原始对象的浅克隆。
  5. 使用Object.keys()Array.prototype.forEach()来确定哪些键值对需要深度克隆。
  6. 如果对象是一个Array,将克隆对象的length设置为原始数组的长度,并使用Array.from()来创建克隆。
  7. 使用以下代码实现深度克隆:
const deepClone = (obj) => {
  if (obj === null) return null;
  let clone = Object.assign({}, obj);
  Object.keys(clone).forEach(
    (key) =>
      (clone[key] =
        typeof obj[key] === "object" ? deepClone(obj[key]) : obj[key])
  );
  if (Array.isArray(obj)) {
    clone.length = obj.length;
    return Array.from(clone);
  }
  return clone;
};

使用以下代码测试你的深度克隆函数:

const a = { foo: "bar", obj: { a: 1, b: 2 } };
const b = deepClone(a); // a!== b, a.obj!== b.obj

总结

恭喜你!你已经完成了“深度克隆对象”实验。你可以在 LabEx 中练习更多实验来提升你的技能。