javascript – 使用父字段从平面列表构建层次结构树?

前端之家收集整理的这篇文章主要介绍了javascript – 使用父字段从平面列表构建层次结构树?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有父字段的“页面”对象的列表.此父字段引用列表中的另一个对象.我想从这个列表中创建一个树层次结构.

这是我的原始列表的样子:

[
  {
    id: 1,title: 'home',parent: null
  },{
    id: 2,title: 'about',{
    id: 3,title: 'team',parent: 2
  },{
    id: 4,title: 'company',parent: 2
  }
]

我想把它转换成一个这样的树结构:

[
  {
    id: 1,parent: null,children:  [
      {
        id: 3,parent: 2
      },{
        id: 4,parent: 2
      }
    ]
]

我希望有一个可重用的功能,我可以随时调用任意列表.任何人知道一个很好的方法来处理这个?任何帮助或建议将不胜感激!

解决方法

function treeify(list,idAttr,parentAttr,childrenAttr) {
    if (!idAttr) idAttr = 'id';
    if (!parentAttr) parentAttr = 'parent';
    if (!childrenAttr) childrenAttr = 'children';

    var treeList = [];
    var lookup = {};
    list.forEach(function(obj) {
        lookup[obj[idAttr]] = obj;
        obj[childrenAttr] = [];
    });
    list.forEach(function(obj) {
        if (obj[parentAttr] != null) {
            lookup[obj[parentAttr]][childrenAttr].push(obj);
        } else {
            treeList.push(obj);
        }
    });
    return treeList;
};

Fiddle

原文链接:https://www.f2er.com/js/152864.html

猜你在找的JavaScript相关文章