遍历器

95 阅读2分钟
  • 遍历器:取出数据容器中所以元素的工具
  1. for循环 (最重要的循环,兼容性好)
  var arr = [10, 203, 44, 54, 5]
  for (var i = 0; i < arr.length; i++) {
    re = arr[i]
    console.log(re)
  }

image.png

2. for in 循环(主要用来遍历普通对象)

 let obj = {
    name: 'zhou',
    age: '**',
    hobby: 'baskitball'
  }
  for (let i in obj) {
    console.log(i, obj[i])
  }

image.png

(1)在for-in循环中i代表对象的属性名值, obj[i] 代表对应的属性值

(2)尽量不用用来遍历数组,有风险,因为因为 i 输出为字符串形式, 而不是数组需要的数字下标某些情况下, 会发生字符串运算而不是数字运算, 导致数据错误

(3)for in 循环的时候,不仅遍历自身的属性,还会找到 prototype 上去,最好在循环体内加一个判断,就用obj[i].hasOwnProperty(i),这样就避免遍历出太多不需要的属性。

  1.  while
  2. do-while 循环循环是while循环的一个变体, 它首先执行一次操作, 然后才进行条件判断, 是 true 的话再继续执行操作, 是 false 的话循环结束。
  3. Array forEach 循环
  var arr = [10, 203, 44, {
    name: 'exo'
  }]
  var re = arr.forEach(function (el, index, arr) { //el表示数组中的元素,index表示数组下标 arr表示遍历的数组
    console.log(el, index, arr)
  })

image.png

循环数组中每一个元素并采取操作, 没有返回值就undefined, 可以不用知道数组长度, 他有三个参数, 只有第一个是必需的, 代表当前下标下的 值。另外请注意, forEach 循环在所有元素调用完毕之前是不能停止的, 它没有break 语句, 如果你必须要停止, 可以尝试try-catch 语句, 就是在要强制退出的时候, 抛出一个 error 给catch 捕捉到, 然后在catch 里面return, 这样就能中止循环了, 如果你经常用这个方法, 最好自定义一个这样的 forEach 函数在你的库里。

6. Array map() 方法

  var arr = [10, 203, 4]
  var re = arr.map(function (el, index, arr) {
    console.log(el, index, arr)
    return el + 1 //返回值自己决定
  })
  console.log(re)

image.png

返回的是一个新数组, 数组中的元素为原始数组元素调用函数处理后的值。注意: map 和 forEach 方法都是只能用来遍历数组, 不能用来遍历普通对象。

7. Array filter() 方法

 var arr = [10, 80, 34, 50]
  var re = arr.filter(function (el, index, arr) {
    console.log(el, index, arr)
    if (el > 18) {
      return true
    } else {
      return false
    }
  })
  console.log(re)

image.png

它会返回通过过滤的元素(返回true加入新数组,false就筛选掉), 不改变原来的数组。 对象也可以筛选

 var arr=[{tag:0,name:"karen"},{tag:1,name:"jack"},{tag:1,name:"marry"}]
      var arr2=arr.filter(function(el){
          return el.tag//是1会保留,0会被筛选掉
      })
      console.log(arr2)

image.png

  1.  Array some() 方法 用于检测数组中的元素是否满足指定条件,当有条件满足时便不再遍历, 返回 true 值, 没有满足的话,遍历完之后返回false,不改变原数组。
var arr = [10, , 50, 200, 500, 400]
  var re = arr.some(function (el) {
    console.log(el)
    return el > 100
  })
  console.log(re, arr)

image.png

  1. Array every() 方法 用于检测数组中的元素是否满足指定条件,当有条件满足时便不再遍历, 返回 false 值, 没有满足的话,遍历完之后返回true,不改变原数组。
 var arr = [200, 500, 10, 50, 400]
  var re = arr.every(function (el) {
    console.log(el)
    return el > 100
  })
  console.log(re, arr)

image.png

  1. Array reduce() 方法 i与j先取前两个值,然后i与j运算后的值重新赋给i,j取数组中下一个值,以此类推;最后运算出一个值。
 var arr = [1, 4, 7, 2, 6, 3];
  var ad = arr.reduce(function (i, j) {
    console.log(i, j)
    return i + j; //可以是其他运算法则
  })
  console.log(ad, arr)

image.png

  1. Array reduceRight() 方法 和 reduce() 功能是一样的, 它是从数组的末尾处向前开始计算。

  2. for of 循环 for of 循环是 Es6 中新增的语句,用来替代for in和forEach, 它允许你遍历 Arrays( 数组), Strings( 字符串), Maps( 映射), Sets( 集合) 等可迭代(Iterable data) 的数据结构, 注意它的兼容性。

let arr = ['name', 'age','tffd',{name:'lay'}];

      for (let i of arr) {

        console.log(i)

      }

image.png