#javascript #arrays #json
#javascript #массивы #json
Вопрос:
У меня есть вложенный массив объектов. пример:
var data = [
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
childs : []
}
]
}
]
},
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
childs : []
}
]
}
.......
]
}
]
Как я могу добавить некоторое свойство в каждый childs
найденный? Если ‘id’ и ‘ParentID’ нужно добавить, тогда тоже отлично. Есть какие-нибудь подсказки?
var data = [
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
anotherPrperty: value
childs : [
{
propertyName: propertyValue,
anotherPrperty: value
childs : [
{
propertyName: propertyValue,
anotherPrperty: value
childs : []
}
]
}
]
},
{
propertyName: propertyValue,
childs : [
{
propertyName: propertyValue,
anotherPrperty: value
childs : []
}
]
}
.......
]
}
]
Комментарии:
1. Привет, что ты пробовал? Подсказка: вам нужен рекурсивный подход к дочерним узлам ^^
Ответ №1:
Вы можете создать функцию, которая добавляет свойство ко всем элементам в массиве, а затем рекурсивно передавать дочерние массивы в ту же функцию:
var data = [{propertyName: 'propertyValue',childs : [{propertyName: 'propertyValue',childs : [{propertyName: 'propertyValue',childs : [{propertyName: 'propertyValue', childs : []}]}]},{propertyName: 'propertyValue',childs : [{propertyName: 'propertyValue',childs : []}]} ] }]
function addProp(arr, name, value){
arr.forEach(item => {
item[name] = value // add property
addProp(item.childs, name, value) // pass children back to function
})
}
addProp(data, "testProp", "testValue")
console.log(data)
Если вы не хотите добавлять prop на первый уровень, вы можете просто вызвать forEach()
массив и начать с дочерних элементов. Что-то вроде:
data.forEach(item => addProp(item.childs, "testProp", "testValue"))