javascript 对象的嵌套数组,动态推送

92dk7w1h  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(104)

我需要更新元素的嵌套列表。
列表可以有无限多个嵌套元素,我需要根据级别和位置找到它们来更新数组。
基本上,我正在做一个树视图,我需要动态地添加节点,所以它可以是动态生成的无限嵌套节点。
我的基本结构是:

const tree = {
  id: 'root',
  name: 'Project: ' + hxr.data.project.name,
  level: 0,
  children: [
    {
      id: 'deliverables',
      name: 'Deliverables',
      children: [
        {
          id: 'd1',
          name: 'Column A',
          children: [
            {
              id: 'c12',
              name: 'config',
              children: [],
              level: 1
            },
            {
              id: 'c123',
              name: 'orthomosaic',
              children: [],
              level: 1
            }
          ],
          level: 1
        },
        {
          id: 'd12',
          name: 'Column B',
          children: [
            {
              id: 'c121',
              name: 'config',
              children: [],
              level: 1
            }
          ],
          level: 1
        }
      ],
      level: 1
    }
  ]
}

注意这是一个对象,前两层总是静态的,所以,如果我想更新新元素,我会做:

tree['children'][0]['children'].push(_node);

其中我的节点结构是:

const _node = {
  id: uuid(),
  name: node.text,
  children: [],
  level: 1,
  type: node.type ?? 'folder'
}

当我动态地添加一个节点,并且因为丢失了引用而想向该节点添加更多元素时,我遇到了困难。
在我看来应该是这样的:

1
tree['children'][0]['children'][pos].push(_node);
2
tree['children'][0]['children'][pos]['children'].push(_node);
2
tree['children'][0]['children'][pos]['children'][pos2]['children'].push(_node);

但既然它是动态的,它可能是无限的。有什么想法吗?

uqxowvwt

uqxowvwt1#

我可以用另一种方法解决这个问题。
因为我需要向selected添加一个子节点,所以我添加了一个id参数,然后对数组执行一个find deep函数,以查找和更新所选节点。

function findDeep(array, id, node) {
        var object;
    
        array.some(function f(a) {
            if (a.id === id) {
                object = a;
                a.children.push(node)
                return true;
            }
            if (Array.isArray(a.children)) {
                return a.children.some(f);
            }
        });
        return object;
    }

相关问题