Нормализуйте глубоко вложенные объекты - PullRequest
0 голосов
/ 14 апреля 2019

Итак, у меня есть этот объект, который представляет иерархию. Какие Является ли лучший способ чая это?

Например, определение количества друзей на каждом уровне, добавление друга на определенной глубине.

{
  "name": "John",
  "Friends": [{
      "name": "Emily",
      "Friends": [{
          "name": "Sandra",
          "Friends": []
        },
        {
          "name": "Michael",
          "Friends": []
        }
      ]
    },
    {
      "name": "Sara",
      "Friends": [{
          "name": "James",
          "Friends": []
        },
        {
          "name": "Yara ",
          "Friends": []
        }
      ]
    }
  ]
}

Ответы [ 2 ]

3 голосов
/ 14 апреля 2019

Этой функции должно хватить, это даст нам возможность выполнять итерацию по ширине, и мы можем добавлять / удалять объекты, если захотим, с помощью некоторых других условных операторов -:

function traverseObjectBreadthWise (obj) {
    for (var key in obj) {
        if (typeof obj[key] == "array" || typeof obj[key] == "object") {
            traverseObjectBreadthWise(obj[key]);
            console.log(key);
        } else {
            console.log(key, "=", obj[key]);
        }
    }
}
0 голосов
/ 14 апреля 2019

Я предлагаю вам использовать lodash. Это так полезно. Вы можете использовать count by, и вы можете найти count для каждого уровня друзей. Я использую его как рекурсивный, потому что уровень Friends может быть больше.

  recusersiveFunc(arr){
    if(Object.keys(arr).includes("Friends")){
        console.log(_.countBy(arr.Friends,"name"));
        arr.Friends.forEach(x => {
          this.recusersiveFunc(x);
        });             
    }
  }

    this.recusersiveFunc(data);//data is your JSON object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...