#javascript #массивы #объекты
Есть массив:
var authority = [
"Дзержинським",
"РВ",
"у",
"місті",
"Харкові",
"ГУ",
"ДМС",
"України",
"в",
"Харківській",
"області"
]
Необходимо на его основе получить многоуровневый объект вида:
var obj = {
"Дзержинським": {
"РВ": {
"у": {
"місті": {
"Харкові": {
"ГУ": {
"ДМС": {
"України": {
"в": {
"Харківській": {
"області": {
}
}
}
}
}
}
}
}
}
}
}
};
Массив может быть разной длины, следовательно объект может иметь больший/меньший
уровень вложенностей.
Подскажите пожалуйста, как это сделать при помощи цикла? Или возможно есть более
правильное решение данной задачи?
Кроме такого больше ничего в голову не приходит :(
var tempObj = {};
tempObj[authority[0]] = {};
tempObj[authority[0]][authority[1]] = {};
tempObj[authority[0]][authority[1]][authority[2]] = {};
tempObj[authority[0]][authority[1]][authority[2]][authority[3]] = {};
tempObj[authority[0]][authority[1]][authority[2]][authority[3]][authority[4]] = {};
tempObj[authority[0]][authority[1]][authority[2]][authority[3]][authority[4]][authority[5]]
= {};
...
Ответы
Ответ 1
Вам поможет reduceRight, заворачиваем каждую итерацию аккумулятор в свойство нового объекта под именем элемента массива. var authority = [ "Дзержинським","РВ","у","місті","Харкові", "ГУ", "ДМС","України","в","Харківській","області"]; let result = authority.reduceRight((acc, el) => ({[el]: acc}), {}); console.log(result); —- upd сокращенная форма записи лямбды в сниппете эквивалентна функции reduceRight : authority.reduceRight(reduceFunc, {}); function reduceFunc(accumulator, element) { var newAccumulator = {}; newAccumulator[element] = accumulator; return newAccumulator; }Ответ 2
var a = ["Дзержинським", "РВ", "у", "місті", "Харкові", "ГУ", "ДМС", "України", "в", "Харківській", "області"] var res = {}, x = res for (var key of a) x = x[key] = {} console.log(res) .as-console-wrapper.as-console-wrapper { max-height: 100vh }
Комментариев нет:
Отправить комментарий