Как установить значение многомерного объекта, когда путь имени хранится в массиве неизвестной длины?

У меня есть массив неизвестной длины, который определяет путь к содержимому, которое я хочу изменить в объекте.

Это то, чего я хочу.

let updatedContent = "Hello World!";
let myArray = ["layer1","layer2","layer3"];
myObject["layer1"]["layer2"]["layer3"] = updatedContent;

Моя проблема в том, что myArray имеет неизвестную длину. Каков наилучший способ обновить значение в объекте?

В массиве ["layer1","layer2","layer3"] находятся просто строки, не связанные с объектом.

zer00ne 22.03.2022 05:00

У меня есть файловая система, в которой пользователи могут добавлять/изменять файлы. layer1, layer2, ect представляют имена папок, которые создал пользователь. myArray на самом деле является глобальной переменной, которая отслеживает, где находится пользователь в файловой системе. Надеюсь, это прояснит мою ситуацию.

James 22.03.2022 05:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот уродливый подход с использованием рекурсивной функции. Идея состоит в последовательном извлечении вложенных свойств, рекурсивном вызове функции с текущим уровнем до конца массива:

function changeObject(obj, arr, content, index = 0) {
  if (index < arr.length - 1) {
    changeObject(obj[arr[index]], arr, content, ++index);
  } else {
    obj[arr[index]] = content;
  }
};

const myObject = {
  layer1: {
    layer2: {
      layer3: "foo"
    }
  }
};

let updatedContent = "Hello World!";
let myArray = ["layer1", "layer2", "layer3"];
myObject["layer1"]["layer2"]["layer3"] = updatedContent;

changeObject(myObject, myArray, updatedContent);
console.info(myObject);

Другие вопросы по теме