遍历?迭代?

遍历? 迭代 ? 循环?递归 ?是一回事吗

  • 循环,业内专用英文loop,指的是在满足条件的情况下,重复执行同一段代码,这是个大概念,大部分的递归遍历迭代都是循环;
  • 迭代,英文称为iterate,指的是按照一定规则逐个访问线性结构的对象中的每一项。比如,for语句
  • 遍历,英文traversal,指的是按照一定的规则访问非线性结构中的每个节点,而且每个节点都只访问一次。
  • 递归(recursion),指的是一个函数不断调用自身的行为,比如递归就是在过程或函数里面调用自身,不过递归效率比迭代低

在理解上首先它们不是啊相互独立的,我们有相同点,比如递归一定有迭代,迭代中不一定用到递归


遍历有几种方式呢?

  • 首先,博主用的最多的是for循环,可以循环读取并且操作对象中每一项
let arr = [1,2,3,6,5,8,9]
  for (let index = 0; index < arr.length; index++) {
    console.log(arr[index])
  }
  • 第二种使用for的升级版for in,在很多大神的帖子中不推荐使用,原因是性能不好,而且容易造成下标错乱问题,emm,博主还没遇到这个问题,不过平时也没怎么用for in,以下代码可以达到方法1的同样方式

遍历对象:for..in非常适合去遍历字面量对象
左边变量:是这个对象的每一个属性
右边变量:要遍历的对象

 let arr = [1,2,3,6,5,8,9]
  for (const key in arr) {
    if (arr.hasOwnProperty(key)) {
      console.log(arr[key]);
    }
  }
  • 第三种遍历方式是调用匿名函数的方式-foreach,目前看来缺点,只是不能break跳出循环,在大多数业务中可以忽略
 let arr = [1,2,3,6,5,8,9]
  //如果遍历数组,这个方法是Array.prototype.forEach( )
  //数组的原型方法
  //forEach 的参数 是一种匿名函数
  //这个匿名函数的参数
  //第一个参数: 数组的每个元素
  //第二个参数: 数组的下标
  //第三个参数: 当前数组对象
  arr.forEach ( function( ele , idx , array ){
  console.log ( ele) ;//每个元素
  console.log ( idx );//下标
  console.log ( array );//当前数组
  });
  • 第四种方式,感觉很多大神都在用,博主想过如何在业务中使用,可能在需要对对象的值做批量操作时用到
   let arr = [1, 2, 3, 6, 5, 8, 9]
    //这个方法其实是 Map.prototype.forEach
    //forEach 的参数: 是一个匿名回调 函数
    //这个匿名 函数的参数
    //第一个参数: value值
    //第二个参数: key值
    //第三个参数: 当前的对象
    var newArr = arr.map (function (val, index) {
      return val * 2
    })
    console.log(newArr)
  • 第五种方式for..of,调用自定义迭代钩子,并为每个不同属性的值执行语句
    let arr = [1, 2, 3, 6, 5, 8, 9]
    //第一个变量: 数组中的每一个元素
    //第二个遍历: 要遍历的数组对象
    // 主要用于迭代对象
    // 不能遍历 object 集合
    for (const iterator of arr) {
      console.log(iterator)
    }

emm,日后有更多的感悟会继续分享的!