资讯专栏INFORMATION COLUMN

javascript递归

terro / 3078人阅读

摘要:调用自身的函数称为递归函数缺点递归占用的内存和资源比较多,同时难以实现和维护。优点在处理之类的树形结构数据时,非常适合用递归。案例数字的阶乘通过乘以进行计算获取存在某个字段的节点某个数或者递归实现数组转树结构调用

调用自身的函数称为递归函数

缺点:递归占用的内存和资源比较多,同时难以实现和维护。

优点:在处理DOM之类的树形结构数据时,非常适合用递归。

案例 数字 n 的阶乘通过乘以 1 2 3 *... n 进行计算
var f = function (x) {  
  if (x === 1) {  
    return 1
  } else {  
    return x * f(x - 1)
  }  
}

const result = f(n)
获取存在某个字段的节点
let new_array = []

function _getChilds(data){
  if(data.ObjType == "某个数"){
    new_array.push(data)
  }
  if(data.Childs && data.Childs.length > 0){
    getChilds(data.Childs)
  }
}

function getChilds(childData){
  for(let i = 0; i < childData.length; i++){
      _getChilds(childData[i])
  }
  // 或者
  // childData.map(item => _getChilds(item))
}
js递归实现数组转树结构
const jsonArr = [
  {name:"a",id:1,pid:0},
  {name:"b",id:2,pid:1},
  {name:"c",id:3,pid:1},
  {name:"d",id:4,pid:2},
  {name:"e",id:5,pid:2}
]

function fn(data, pid) { 
  let result = []
  let temp
  for (let i = 0; i < data.length; i++) { 
    if (data[i].pid == pid) { 
      let obj = {
        "name": data[i].name,
        "id": data[i].id
      }
      temp = fn(data, data[i].id)
      if (temp.length > 0) { 
        obj.children = temp
      } 
      result.push(obj)
    } 
  } 
  return result
}

//调用
const result = fn(jsonArr,0)

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

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

相关文章

  • JavaScript专题之递归

    摘要:专题系列第十八篇,讲解递归和尾递归定义程序调用自身的编程技巧称为递归。然而非尾调用函数,就会创建多个执行上下文压入执行上下文栈。所以我们只用把阶乘函数改造成一个尾递归形式,就可以避免创建那么多的执行上下文。 JavaScript 专题系列第十八篇,讲解递归和尾递归 定义 程序调用自身的编程技巧称为递归(recursion)。 阶乘 以阶乘为例: function factorial(n...

    asoren 评论0 收藏0
  • 翻译连载 | 第 9 章:递归(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》

    摘要:一旦我们满足了基本条件值为,我们将不再调用递归函数,只是有效地执行了。递归深谙函数式编程之精髓,最被广泛引证的原因是,在调用栈中,递归把大部分显式状态跟踪换为了隐式状态。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;...

    MasonEast 评论0 收藏0
  • javascript中的递归

    摘要:二项目中用到的几个经典的递归求的和分析假设递归函数已经写好为,即,就是求的和。递归函数实现每天凌晨定时启动定时器执行代码分析假设递归函数已经写好了。 一、递归的概念 在程序中函数直接或者间接调用自身的一种方法,就叫做递归。它通常把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程中所需要的多次重复计算,大大减少了程序的代码了。 二、...

    acrazing 评论0 收藏0
  • JavaScript 数据结构与算法之美 - 递归

    摘要:递归常见问题及解决方案警惕堆栈溢出可以声明一个全局变量来控制递归的深度,从而避免堆栈溢出。文章输出计划数据结构与算法之美的系列文章,坚持天左右更新一篇,暂定计划如下表。 showImg(https://segmentfault.com/img/bVbuF9e?w=900&h=500); 前言 算法为王。 排序算法博大精深,前辈们用了数年甚至一辈子的心血研究出来的算法,更值得我们学习与...

    Rocko 评论0 收藏0
  • LeetCode 之 JavaScript 解答第21题 —— 合并两个有序链表(Merge Two

    摘要:什么意思呢比如上方合并链表的代码,分别明确函数的参数和返回值是什么参数是两个合并的链表结点头结点。返回值是合并后的链表。 Time:2019/4/9Title: Merge Two Sorted ListsDifficulty: EasyAuthor: 小鹿 题目:Merge Two Sorted Lists Merge two sorted linked lists and re...

    wdzgege 评论0 收藏0
  • 算法系列——JavaScript快速排序思想实现

    摘要:源码实现快速排序理论理解起来很容易,但经常是实际写代码,无从下手,下面是我根据快排的步骤实现的递归快速排序。合并第一次快速排序的,,数组。 原理 快速排序离不开递归的思想,你如果不了解递归,可以结合我另外一篇文章来学习 算法入门之递归分而治之思想的实现 网上有有趣的动态图来表示快速排序,但其实我们大部分程序员都是脑子不太好使那种,即使看了形象生动的动态图,还是想不到具体实现思路。 排序...

    lentrue 评论0 收藏0

发表评论

0条评论

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