Сглаживание пустой группы на дереве в моем приложении nodeJS - PullRequest
0 голосов
/ 16 мая 2018

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

пользователи создаются как объекты в конструкторе класса

user.js

   class User {
  constructor(name, password, age) {
    this.name = name;
    this.password = password;
    this.age = age;
   }
      }

users.js

 class users {
    constructor() {
      this.users = {}
     }

И присоединяется к группам также в классе подрядчика.

group.js

    class Group {
   constructor(name, parent) {
    this.name = name;
    this.parent = parent || null;
    this.children = [];
    this.users = {}
      }

groups.js

  class groups {
  constructor() {
    this.root = new Group('root');
     }

Таким образом, если имя группы - bar, а имя пользователя - foo, то полученный вами журнал будет похож на:

   Group {name:"root",parent:,children:,users:) chidren: "bar" user: USER 
  {name: "foo",password: "1010",age: "1010"}.

редактировать я думаю, что я хочу сделать это так: получить имя группы, найти ее отца, проверить, есть ли у отца только один ребенок, сбросить массив отца (длина = 0)

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

1 Ответ

0 голосов
/ 16 мая 2018

Не проверял, но он должен выполнить работу:

const loopTree = (tree) => {
    if (tree.parent) { //if the element has no parent, no use checking if I should move to parent
        let usersToUp = tree.children.length > 0 ? {} : tree.users; //if children has no items, then the users object is the users object, otherwise an empty object
        Object.assign(tree.parent.users, usersToUp) //assign the users to the parent... No conditional here, if usersToUp is an empty object then this will do nothing.
        if (usersToUp.keys().length > 0) { //and here I remove users from current tree, if there were users to move
            tree.users = {};
        }
    }
    tree.children.forEach(loopTree); //now I just call the same function for other children of the tree
}

Начиная с верхней группы, если у нее есть родитель, проверьте перемещение пользователей и переместите их. Затем перейдите к обработке элементов на нижнем уровне.

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

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