У меня есть n уровней вложенного массива объектов тегов с заголовком и идентификатором. Я пытаюсь создать объект с идентификаторами в качестве ключей, а значения - это массив, описывающий путь заголовка к этому идентификатору.
Я не мастер рекурсии, поэтому моя попытка ниже не совсем точно укажите нужный мне результат.
Вот исходный массив вложенных тегов:
const tags = [
{
title: 'Wood',
id: 'dkgkeixn',
tags: [
{
title: 'Material',
id: 'ewyherer'
},
{
title: 'Construction',
id: 'cchtfyjf'
}
]
},
{
title: 'Steel',
id: 'drftgycs',
tags: [
{
title: 'Surface',
id: 'sfkstewc',
tags: [
{
title: 'Polished',
id: 'vbraurff'
},
{
title: 'Coated',
id: 'sdusfgsf'
}
]
},
{
title: 'Quality',
id: 'zsasyewe'
}
]
}
]
Вывод, который я пытаюсь получить, таков:
{
'dkgkeixn': ['Wood'],
'ewyherer': ['Wood', 'Material'],
'cchtfyjf': ['Wood', 'Construction'],
'drftgycs': ['Steel'],
'sfkstewc': ['Steel', 'Surface'],
'vbraurff': ['Steel', 'Surface', 'Polished'],
'sdusfgsf': ['Steel', 'Surface', 'Coated'],
'zsasyewe': ['Steel', 'Quality']
}
Итак, я строю эту рекурсивную функцию, которая почти выполняет свою работу, но я продолжаю получать неправильные пути в моей карте квартиры / ключа:
function flatMap(tag, acc, pathBefore) {
if (!acc[tag.id]) acc[tag.id] = [...pathBefore];
acc[tag.id].push(tag.title);
if (tag.tags) {
pathBefore.push(tag.title)
tag.tags.forEach(el => flatMap(el, acc, pathBefore))
}
return acc
}
const keyMap = flatMap({ title: 'Root', id: 'root', tags}, {}, []);
console.log("keyMap", keyMap)
Я пытаюсь получить путь до тега без тегов а затем установите этот путь в качестве значения для идентификатора, а затем pu sh заголовок «собственный» элементов. Но как-то путаются путаницы.