Как получить n-й уровень разобранного json? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть JSON с тремя уровнями, и он хранится в виде массива. Мне нужно получить 2-й уровень (отсчет начинается с 0), и ниже на каждом уровне есть более 10 элементов.Как это может быть реализовано на JavaScript. Нужна ваша помощь.Весь ответ будет полезен.

пс.некоторые элементы 1-го уровня и 2-го уровня могут быть пустыми

[
  {
    "name": "0th level first", //0th level
    "options": [
      {
        "name": "1st level Cafe", // 1st level
        "options": [
          {
            "name": "2nd level Staff", //2nd level
            "options": [
              {
                "name": "Gary", //3rd level
                "age": 18
              },
              {
                "name": "James", //3rd level
                "age": 25
              }
            ]
          }
        ]
      }
    ]
  }
]

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Возможно, это?:)

  data.forEach((value, index) => {
    for(stage0 in value){
      if(typeof value[stage0] === 'object'){
        value[stage0].forEach((val, index) => {
          for(stage1 in val){
            if(typeof val[stage1] === 'object'){
              val[stage1].forEach((val2, index) => {
                for(stage2 in val2){
                  console.log(val2[stage2]);
                }
              })
            }
          }
        })
      }
    }
  })
0 голосов
/ 22 ноября 2018

Вы можете использовать array.forEach , который будет повторяться только через каждый уровень.

в первом цикле есть параметры вызова свойства, которые являются массивом, вам нужно пройти через циклмассив опций на уровне 0, во втором цикле снова появляется еще один массив опций, вам нужно снова перебрать массив опций на 1 уровне.тогда вы достигнете третьего уровня, который является вашим выходом.

Третий уровень означает начинать с нуля его второй уровень.

Я надеюсь, что это решит проблему.

var data = [
  {
    "name": "0th level first", //0th level
    "options": [
      {
        "name": "1st level Cafe", // 1st level
        "options": [
          {
            "name": "2nd level Staff", //2nd level
            "options": [
              {
                "name": "Gary", //3rd level
                "age": 18
              },
              {
                "name": "James", //3rd level
                "age": 25
              }
            ]
          }
        ]
      }
    ]
  }
]

data.forEach(fl => {
 fl.options.forEach(sl => {
  sl.options.forEach(tl => {
    console.log("second level starting from 0",tl)
  })
 })
})
0 голосов
/ 22 ноября 2018

Предположим, data содержит ваш json, у нас есть 2 onliners:

let out = data[0].options[0].options[0];

let outArr = data.flatMap(x=>x.options.flatMap(y=>y.options));

результаты

// out = {"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}

// outArr = [{"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}]

Первый (out) содержит один 2-й элемент.Здесь мы используем здесь древовидные индексы (три нуля): сначала data[0] возвращает первый элемент в массиве данных, затем options[0] возвращает первый элемент в массиве параметров.

Второе решение (outArr) содержит массив всех2-е элементы.Мы используем здесь JS flatMap

Чтобы написать второе решение вдохновило меня abdullahkady комментарий ниже вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...