我需要您的帮助,以创建一个可以平整空组并将其用户移回其父级的函数。
这些组是对象,它们的子级在一个数组中。

在类构造函数中将用户创建为对象

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)

只有生一个孩子,您才能继续。
检查小组中是否有孩子(如果有),并告诉他们该小组是您的新父亲。
将孩子们推向父母的阵营。

最佳答案

没有测试它,但是应该可以完成工作:

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
}


从顶部组开始(如果有父级),请检查是否有要移动的用户,然后移动他们。然后继续处理较低级别的元素。

由于它作用于对象引用,因此不需要任何return语句。

关于javascript - 在我的nodeJS应用中展平树上的空组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50375378/

10-10 17:03