Как перебрать объект JSON и динамически добавить объект пары ключ-значение, используя уровень иерархии в Javascript? - PullRequest
0 голосов
/ 19 января 2020

Я хочу, чтобы это JSON было повторено и добавило пару ключ-значение с ее уровнем.

Например:

Иерархия первого уровня должна быть уровнем 0 и второй уровень должен быть уровнем 1 и т. Д.

var json = [{
  "name": "parent 1",
  "children": [
    {
      "name": "child 1",
      "children": [
            {
            "name": "child 11"
            }
        ]
    },
    {
      "name": "child 2"
    }
  ]
}];

Ожидается json:

var json = [
{
  "name": "parent 1",
  "level": "0",
  "children": [
    {
      "name": "child 1",
      "level": "1",
      "children": [
            {
            "name": "child 11",
            "level": "2"
            }
        ]
    },
    {
      "name": "child 2",
      "level": "1"
    }
  ]
}];

Ответы [ 3 ]

0 голосов
/ 19 января 2020

Я думаю, что с помощью Array.protoype.map() вы можете достичь требуемой цели.

Метод map () создает новый массив, заполненный результатами вызова предоставленной функции. на каждый элемент в вызывающем массиве.

Пожалуйста, найдите возможное решение для вашего вопроса:

const data = [{"name": "parent 1","children": [{"name": "child 1","children": [{"name": "child 11"}]},{"name": "child 2"}]}];

const addLevel = (array, level) => {
  if (!level) { level = 0; }
        
  return array.map(e => {
    if (e.children) { e.children = addLevel(e.children, level + 1); }
    return { ...e, level };
  });
};

const result = addLevel(data);
console.log(result);

Надеюсь, это поможет!

0 голосов
/ 19 января 2020

для

var json = [{
  "name": "parent 1",
  "children": [
    {
      "name": "child 1",
      "children": [
            {
            "name": "child 11"
            }
        ]
    },
    {
      "name": "child 2"
    }
  ]
}];

Простое решение -

function mapping(ar , i = 0 ) {
    ar.map(el => {        
        el.level = i ;
        if(el.children){
            mapping(el.children , i+1);
        }
    });
}
mapping(json)



let solution = JSON.stringify(json) ;
console.log(solution)

[
{"name":"parent 1",
 "children":[{
              "name":"child 1",
              "children":[{
                           "name":"child 11",
                           "level":2,
                         }],
               "level":1
                },
               {
                "name":"child 2",
                "level":1
                }], 
 "level":0}
]
0 голосов
/ 19 января 2020

Вы можете использовать Loda sh до l oop над вашими объектами и массивом:

https://lodash.com/docs/4.17.15#forEach

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