资讯专栏INFORMATION COLUMN

javascript 递归 tree

DrizzleX / 3072人阅读

let animals = [
    { id: "animals", name: "animals", parent: null },
    { id: "mammals", name: "mammals", parent: "animals" },
    { id: "mammals2", name: "mammals2", parent: "animals" },
    { id: "cats", name: "cats", parent: "mammals" },
    { id: "dogs", name: "dogs", parent: "mammals" },
    { id: "chihuahua", name: "chihuahua", parent: "dogs" },
    { id: "labrador", name: "labrador", parent: "dogs" },
    { id: "persian", name: "persian", name: "animals", parent: "cats" },
    { id: "siamese", name: "siamese", parent: "cats" }
]
let isEmptyObject = (obj) => {
    for (let t in obj)
        return !1;
    return !0
}
let makeTree = (animals, parent) => {
    let node = {}

    let filters = animals.filter(c => c.parent === parent)

    if (filters.length) {
        filters.forEach(c => {

            node[c.id] = c

            n = makeTree(animals, c.id)

            node[c.id]["children"] = []

            if (!isEmptyObject(n)) {
                node[c.id]["children"].push(n)
            }

        })
    }

    return node
}
console.log(
    JSON.stringify(
        makeTree(animals, null), null, 2
    )
)
/**
 {
  "animals": {
    "id": "animals",
    "name": "animals",
    "parent": null,
    "children": [
      {
        "mammals": {
          "id": "mammals",
          "name": "mammals",
          "parent": "animals",
          "children": [
            {
              "cats": {
                "id": "cats",
                "name": "cats",
                "parent": "mammals",
                "children": [
                  {
                    "persian": {
                      "id": "persian",
                      "name": "animals",
                      "parent": "cats",
                      "children": []
                    },
                    "siamese": {
                      "id": "siamese",
                      "name": "siamese",
                      "parent": "cats",
                      "children": []
                    }
                  }
                ]
              },
              "dogs": {
                "id": "dogs",
                "name": "dogs",
                "parent": "mammals",
                "children": [
                  {
                    "chihuahua": {
                      "id": "chihuahua",
                      "name": "chihuahua",
                      "parent": "dogs",
                      "children": []
                    },
                    "labrador": {
                      "id": "labrador",
                      "name": "labrador",
                      "parent": "dogs",
                      "children": []
                    }
                  }
                ]
              }
            }
          ]
        },
        "mammals2": {
          "id": "mammals2",
          "name": "mammals2",
          "parent": "animals",
          "children": []
        }
      }
    ]
  }
}
*/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88243.html

相关文章

  • JavaScript来学习树「译」

    摘要:树可谓是开发者最常碰到的数据结构之一了要知道整张网页就是一棵树啊所以我们就来学习树这一数据结构吧在这篇文章中我们将创建一棵树并且用两种不同的方法来遍历它深度优先遍历和宽度广度优先遍历方法使用借助栈这一数据结构来访问树的每个节点则借助了队 树可谓是web开发者最常碰到的数据结构之一了. 要知道, 整张网页就是一棵DOM树啊 (Document Object Model ). 所以我...

    Youngdze 评论0 收藏0
  • 数据结构JavaScript描述(三)

    摘要:有关算法,数据结构的代码已上传至算法与数据结构。构造函数深度优先遍历广度优先遍历插入中序遍历前序遍历后序遍历声明一棵树声明一个节点相关算法深度优先遍历深度优先遍历,先查看左孩子是否存在,若存在,传入递归,否则,再查看右孩子。 这次来了解一下二叉树,以及相应的算法。以下代码并非所有都由本人所写,只是在此分享出来,以便大家学习。 有关javascript算法,数据结构的代码已上传至 jav...

    张迁 评论0 收藏0
  • JavaScript实现无限级递归

    摘要:需求最近遇到一个需求,平时被后台惯着直接返回了树形结构给到前端,前端对这种嵌套类型的数据如地区的级联或菜单的树形结构省掉了一层处理。当然,没用好就相当于一堆废铁,甚至将导致一些不可预料的结果。相比起递归,我更喜欢这种方法。 需求 最近遇到一个需求,平时被后台惯着直接返回了树形结构给到前端,前端对这种嵌套类型的数据(如地区的级联或菜单的树形结构)省掉了一层处理。换了个后台小哥哥返回了扁平...

    atinosun 评论0 收藏0
  • LeetCode 之 JavaScript 解答第94题 —— 二叉树的中序遍历

    摘要:小鹿题目二叉树中序遍历给定一个二叉树,返回它的中序遍历。通常递归的方法解决二叉树的遍历最方便不过,但是我还是喜欢增加点难度,用一般的迭代循环来实现。 Time:2019/4/25Title:Binary Tree Inorder TraversalDifficulty: MediumAuthor:小鹿 题目:Binary Tree Inorder Traversal(二叉树中序遍历...

    Jason 评论0 收藏0
  • 【译】JavaScript数据结构(4):树

    摘要:遍历树是访问树的每个节点的正式方式。想象一下,我们要将包含奇数数据的任何节点记录到控制台,并使用遍历树中的每个节点。第三个参数,是这个方法中用来遍历树的类型。与类似,移除将遍历树以查找包含第二个参数的节点,现在为。 翻译:疯狂的技术宅英文:https://code.tutsplus.com/art...说明:本文翻译自系列文章《Data Structures With JavaScri...

    Keagan 评论0 收藏0

发表评论

0条评论

DrizzleX

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<