Получить значение из массива по последовательности его ключей
Столкнулся с ядрёной задачкой, потратил много часов, перерыл весь интернет, решения не нашёл, и все мои попытки как то это решить оказались очень далеки от правды - обращаюсь к вам.
Имеется многомерный массив (массивы в массиве) с уровнем вложенности более 3. Назовём его arr.
Если я заранее знаю какое значение я хочу достать, я пишу что-то вроде arr[0][2][1][4] и получаю это значение. Но как получить это значение, если у меня есть последовательность уровней вложенности в переменной, например это x="0,2,1,4" - и как теперь достать значение из arr используя x?
В идеале нужно не просто достать значение, а изменить (его и только его), чтобы в результате выполнения функции получился массив точно такой же как был на входе, единственным отличием должно быть это изменённое значение.
Вот работающая реализация - самое ближайшее, к чему мне удалось подобраться. Это ужасный костыль, и я верю что это можно сделать правильнее.
Объясняю как работает этот код - мы разбираем последовательность ключей массива на отдельные ключи, потом в зависимости от количества этих ключей вручную добавляем дополнительные квадратные скобки с значением ключа к массиву. Должен же быть другой способ это сделать?
Ответы (1 шт):
Для таких случаев существует понятие как рекурсия.
function findFieldByIndexes(array, path){
let first = path.shift();
return path.length > 0 ?findFieldByIndexes(array[first], path): array[first];
}
ну и вызов
findFieldByIndexes(arr, path.toString().split(","));
