Javascript递归的小笔记

什么是递归

简单的说就是在函数内部调用此函数

function foo() {
  foo()
}
//仅作示例,真这么写就堆栈溢出了

怎么用递归

  1. 大问题分解为相同的小问题
  2. 设置明确的终止条件
  3. 虽然是重复运行同一函数但每一步都会更接近终止条件。
//求1到n的和
function sum(n){
    if(n==1) return 1;
    return sum(n-1) + n;
}

实际应用

let arr = [
  {
    _id: '5bf93b99f18bee3ccce96389',
    name: '吃饭',
    children: [{_id: '5bf93b99f18bee3ccce9638a', name: '午饭',children: []}] },

  {_id: '5bf93b99f18bee3ccce96388',
    name: '睡觉',
    children: [] }
]

树状结构,需要把每一个对象的id与name取出并重新存入一维数组。也就是不能有children了

function extract (arr) {
  let array = []
  ;(function iteration (arr) {
    for (const element of arr) {
      array.push({ id: element._id, name: element.name })
      if (element.hasOwnProperty('children') && element.children.length > 0) {
        iteration(element.children)
      }
    }
  })(arr)
  return array
}

运行一下结果正确,多套几层也能成功展开。

[ { id: '5bf93b99f18bee3ccce96389', name: '吃饭' },
  { id: '5bf93b99f18bee3ccce9638a', name: '午饭' },
  { id: '5bf93b99f18bee3ccce96388', name: '睡觉' } ]

你可能感兴趣的:(Javascript递归的小笔记)