Как добавить свойство во вложенный json?

#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"))