#javascript
Вопрос:
У меня есть объект с вложенными полями, отличными от именованного подпункта, мне нужно изменить имена этого поля на дочерние.
Как можно аккуратно реализовать эту функциональность, возможно, есть способы помимо рекурсии?
let data = [
{
name: 'Alex',
subItem: [
{
name: 'Den',
subItem: [
]
}
]
}
]
function transformData = (data) => {
return data.map(stat=>{
})
}
console.log(transformData(data))
//шоуд быть
let data = [
{
name: 'Alex',
children: [
{
name: 'Den',
children: []
}
]
}
]
Комментарии:
1. Может ли быть больше уровней вложенности или только столько?
2. более 1 уровней
3. Значит, она динамична? а это значит, что уровней может быть много?
4. да, много уровней
Ответ №1:
Javascript уже включает в себя рекурсивный преобразователь объектов JSON. stringify
с replacer
функцией:
let data = [
{
name: 'Alex',
subItem: [
{
name: 'Den',
subItem: [ {name: 'Foo', subItem: []} ],
}
]
}
]
JSON.stringify(data, function(_, v) {
if (v.subItem) {
v.children = v.subItem
delete v.subItem
}
return v
})
console.log(data)
В простом случае, подобном этому, вы также можете просто напрямую управлять строкой JSON:
newData = JSON.parse(
JSON.stringify(data)
.replaceAll(`"subItem":`, `"children":`))
Комментарии:
1. Это выглядит хорошо, но что, если объект содержит текст с подэлементом заголовка: (
2. @Ксения:
"subItem":
может совпадать только с ключом в JSON, а не со значением или его частью.