作家
登录

使用递归遍历并转换树形数据(以TypeScript为例)

作者: 来源: 2017-11-02 16:13:20 阅读 我要评论

  •     // 大年夜一组节点生成 <ul>,为每个节点生成并附加 <li>, 
  •     // 同时将 <li> 到到 <ul> 中保存构造信息 
  •     function makeUl(nodes: INode[]) { 
  •         return nodes 
  •             .map(node => { 
  •                 const $li = $("<li>"
  •                     .append($("<div>").text(node.name || "")); 
  •                 node.dom = $li; 
  •                 return $li; 
  •             }) 
  •             .reduce(($ul, $li) => $ul.append($li), $("<ul>")); 
  •     } 
  •  
  •     const $rootUl = makeUl(roots); 
  •  
  •     const queue: INode[] = [...roots]; 
  •     while (queue.length) { 
  •         const node = queue.shift()!; 
  •  
  •         if (node.nodes && node.nodes.length) { 
  •             const $ul = makeUl(node.nodes); 
  •             node.dom.append($ul); 
  •             queue.push(...node.nodes); 
  •         } 
  •     } 
  •     return $rootUl; 
  •  
  • 固然这里和膳绫擎讲递归遍历 printNode 的时刻一样定义下场部函数表达式 makeUl,但这琅绫腔有递归,因为 makeUl 内部没有调用自身,或者某个会调用 makeUl 的函数。

    然后同伙说没看明白,好吧,那我大年夜头讲起

    但问题照样再深刻一点,因为膳绫擎的代码改变了原数据。而一般情况下,我们应当尽量避免如许的副感化

    没有副感化的广度遍历生成节点

    1. // 声明一个新构造,它把 INode 和 DOM 组合在一路。 
    2. // 这个构造将代替 INode 作为队列的元素类型 
    3. interface IDomNode { 
    4.     node: INode; 
    5.     dom: JQuery; 
    6.  
    7. function makeTreeWidely(roots: INode[]): JQuery { 
    8.     // convert 将节点数组转换为 IDomNode 数组, 
    9.     // 同时还干了本来 makeUl 干的工作,返回一个 $ul 
    10.     function convert(nodes: INode[]) { 
    11.         const domNodes = nodes 

    12.   推荐阅读

        让我们一起来消灭CSRF跨站请求伪造(上)

      导致HTTP verb应用欠妥的重要原因在于浏览器对HTTP标准的支撑存在缺点,这是一种汗青遗留问题。在XML HTTP Request(XHR)风行起来之前,我们几乎得依附特定框架和代码库来应用HTTP verb(除了GET和POST之>>>详细阅读


      本文标题:使用递归遍历并转换树形数据(以TypeScript为例)

      地址:http://www.17bianji.com/lsqh/38416.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)