Глубокое клонирование объекта

JavaScriptJavaScriptBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся создавать глубокую копию объекта на JavaScript. Мы будем использовать рекурсию для клонирования примитивов, массивов и объектов, исключая экземпляры классов. В конце практического занятия вы сможете создать полную копию объекта без изменения исходного.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/destr_assign("Destructuring Assignment") subgraph Lab Skills javascript/variables -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/data_types -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/arith_ops -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/comp_ops -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/cond_stmts -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/array_methods -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/obj_manip -.-> lab-28260{{"Глубокое клонирование объекта"}} javascript/destr_assign -.-> lab-28260{{"Глубокое клонирование объекта"}} end

Инструкции по глубокому клонированию объекта

Для глубокого клонирования объекта следуйте шагам:

  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, чтобы улучшить свои навыки.