Объект глубокого клонирования не запускает функцию — javascript

#javascript

#javascript

Вопрос:

Я пытаюсь клонировать объект, который заморожен с помощью npm deep-freeze, но функция больше не будет запускаться.

Я попытался запустить if(typeof === "object") , за которым следует Object.assign , но это дает мне

Ошибка типа: не удается назначить свойство только для чтения

 function updateTree(tree, id, values) {
  const treeData = JSON.parse(JSON.stringify(tree));
  const dataKeys = Object.keys(tree[id]);

  for (let property in treeData) {
    if (property === treeData[id].id) {
      dataKeys.forEach(key =>
        key in values ? Object.assign(treeData[id], values) : null
      );

      if (treeData[id].children.length >= 1) {
        treeData[id].children.map(childId =>
          updateTree(treeData, childId, values)
        );
      }
    }
  }
  return treeData;
}
  

 test("update child nodes", t => {
      const tree = freeze({
        "1": {
          id: "1",
          foo: "",
          baz: "",
          children: ["2", "3"]
        },
        "2": {
          id: "2",
          foo: "",
          baz: "",
          children: ["4", "5"]
        },
        "3": {
          id: "3",
          foo: "",
          baz: "",
          children: ["6"]
        },
        "4": {
          id: "4",
          foo: "",
          baz: "",
          children: ["7"]
        },
        "5": {
          id: "5",
          foo: "",
          baz: "",
          children: []
        },
        "6": {
          id: "6",
          foo: "",
          baz: "",
          children: []
        },
        "7": {
          id: "7",
          foo: "",
          baz: "",
          children: []
        }
      });


      updateTree(tree, "2", {
        foo: "bar",
        baz: "qux"
      })
  

Ожидаемый результат — запуск функции updateTree(), поэтому функция является рекурсивной

 updateTree(treeData, childId, values)
  

Комментарии:

1. JSON.parse(JSON.stringify(tree)) — о, наивная копия, о, бесполезность…

2. @user633183 вероятно, пытается удалить все функциональные и неопределенные ключи?

3. Я не могу воспроизвести проблему с опубликованным вами кодом. Вы никогда не назначаете что-то, что имеет свойства только для чтения? Также, возможно, вам следует начать все сначала. Ваш код делает действительно странные вещи (например key in values ? … , или map вызов, результат которого отбрасывается).

4. Вы упомянули npm deep-freeze, как будто это главная проблема. Вероятно, вам нужно показать этот код.