首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组转换为树

将数组转换为树
EN

Stack Overflow用户
提问于 2019-04-26 20:31:01
回答 1查看 103关注 0票数 0

需要将数据数组转换为树:

代码语言:javascript
运行
复制
const array = [{
  id: 5,
  name: 'vueJS',
  parentId: [3]
}, {
  id: 6,
  name: 'reactJS',
  parentId: [3]
}, {
  id: 3,
  name: 'js',
  parentId: [1]
}, {
  id: 1,
  name: 'development',
  parentId: null
}, {
  id: 4,
  name: 'oracle',
  parentId: [1,2]
}, {
  id: 2,
  name: 'data-analysis',
  parentId: null
}];

现在,它使用以下函数工作:

代码语言:javascript
运行
复制
function arrayToTree(array, parent) {
  var unflattenArray = [];
  array.forEach(function(item) {
    if(item.parentId === parent) {
      var children = arrayToTree(array, item.id);
      if(children.length) {
        item.children = children
      }
      unflattenArray.push(item)
    }
  });
  return unflattenArray;
}
console.log(arrayToTree(array, null));

关于这个特性,我有两个问题:

  1. "parentId“的值应该是id的数组,例如- "parentId":2,3
  2. 如何转换为只起作用的一个参数-“数组”?

https://codepen.io/pershay/pen/PgVJOO?editors=0010

EN

回答 1

Stack Overflow用户

发布于 2019-04-27 03:58:20

我觉得这个问题令人费解。听起来,您真正想说的是,数组表示“树中节点类型的定义”,而不是树中节点的实际实例。

因此,您的问题是需要将“定义”从数组复制到树中的新“实例”节点。这将使“oracle”显示两次,因为您将为其父数组中的每个父节点创建一个新的“oracle实例”节点。在技术上,它不需要是一个深入的副本,这取决于您的使用,因此您可以用Object.assign来证明概念,但是每个实例都指向同一个父数组,这可能会或不会对您添加到定义中的该引用值或将来的引用值造成问题。

最后,根据树的大小和真正想要做的事情,您可能希望转换为节点/边表示的树,而不是父/子树。对于非常大的数据集,递归有时会给您带来问题。

对不起,我在打电话,所以有些东西在密码上很难看出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55874567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档