你不知道的JS遍历 - 2

141 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

上一节介绍了常见的循环遍历方式和filter & map,这一节介绍另外几种方式

JavaScript中常见的遍历有

  • some & every
  • find & findIndex
  • reduce & reduceRight

1. some & every

  • some

    • some为数组中的每一个元素执行一次callback函数,直到找到一个使得callback返回一个真值 (true),不会对空数组进行检测不会改变原始数组
    • 语法
      arr.some(fn[, thisArg])
      
    • 示例
      const arr = [
          {isShow: false},
          {isShow: true},
          {isShow: false}
      ]
      
      arr.some(item => item.isShow) 
      
      // 结果 true
      

    some 若某一元素满足条件,返回 true,循环中断;所有元素不满足条件,返回 false。

  • every

    • 用于检测数组中的所有元素是否都满足指定条件,会遍历数组的每一项,如果有有一项不满足条件,则表达式返回false,剩余的项将不会再执行检测;如果遍历完数组后,每一项都符合条,则返回true。

    • 语法

      array.every(function(currentValue,index,arr), thisValue)
      
    • 示例

      const arr = [
          {isShow: false},
          {isShow: true},
          {isShow: false}
      ]
      
      arr.every(item => item.isShow)
      
      // 结果 false
      

      every 若某一元素不满足条件,返回 false,循环中断;所有元素满足条件,返回 true。

some 和 every 异同点?

  • 二者都是用来做数组条件判断的,都是返回一个布尔值,二者都可以被中断
  • some 若某一元素满足条件,返回 true,循环中断;所有元素不满足条件,返回 false。
  • every 与 some 相反,若有益元素不满足条件,返回 false,循环中断;所有元素满足条件,返回 true

2. find & findIndex

  • find

    • 返回数组满足条件的的第一个元素的值,数组中的每个元素都调用一次函数执行,当数组中的元素在测试条件时返回true时, find() 返回符合条件的元素,之后的值不会再调用执行函数,如果没有符合条件的元素返回undefined。对于空数组函数是不会执行的,没有改变数组的原始值

    • 语法

      array.find(function(currentValue, index, arr),thisValue)
      
    • 示例

      const arr = [
          {isShow: false},
          {isShow: true},
          {isShow: false}
      ]
      
      const result = arr.find(item => !item.isShow)
      console.log(result); 
      
      // 结果 {isShow: false}
      

    find 方法返回数组中满足 callback 函数的第一个元素的值。如果不存在返回 undefined

  • findIndex

    • 返回数组满足条件的的第一个元素的位置,数组中的每个元素都调用一次函数执行,当数组中的元素在测试条件时返回true时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。如果没有符合条件的元素返回 -1。对于空数组函数是不会执行的,没有改变数组的原始值

    • 语法

      array.findIndex(function(currentValue, index, arr), thisValue)
      
    • 示例

      const arr = [
          {isShow: false},
          {isShow: true},
          {isShow: false}
      ]
      
      const result = arr.findIndex(item => item.isShow)
      console.log(result)
      
      // 结果 1
      

      findIndex 它返回数组中找到的元素的索引,而不是其值,如果不存在返回 -1

find 和 findIndex 异同点?

  • 二者都是用来查找数组元素
  • find 方法返回数组中满足 callback 函数的第一个元素的值。如果不存在返回 undefined
  • findIndex 它返回数组中找到的元素的索引,而不是其值,如果不存在返回 -1

3. reduce & reduceRight

  • reduce
    • reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素。它传入对前一个元素进行计算的返回值。结果是单个值。它是在数组的所有元素上运行 reducer 的结果。reducer 函数逐个遍历数组元素。在每一步中,reducer 函数将当前数组值添加到上一步的结果中,直到没有更多元素要添加。

    • 语法

      array.reduce(function callbackfn(previousValue, currentVaule, currentIndex,  array), initialValue)
      
      • previousValue:通过上一次调用回调函数获得的值。如果向 reduce() 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
      • currentVaule:当前元素数组的值。
      • currentIndex:当前数组元素的数字索引。
      • array:包含该元素的数组对象
      • initialValue:可省略的参数,传递给函数的初始值
    • 示例

      const listReduce = [
          {width: 20},
          {width: 70},
          {width: 10}
      ]
      
      const total = listReduce.reduce((currentTotal, item) => {
          return currentTotal + item.width
      }, 0)
      console.log(total)
      
      // 结果 100
      
  • reduceRight
    • reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。reduce() 对于空数组是不会执行回调函数的。

    • 语法

      array.reduceRight(function callbackfn(previousValue, currentVaule, currentIndex,  array), initialValue)
      
    • 示例

      const listReduce = [
          {width: 20},
          {width: 70},
          {width: 10}
      ]
      
      const total = listReduce.reduceRight((currentTotal, item) => {
          return currentTotal + item.width
      }, 0)
      console.log(total)
      
      // 结果 100
      

find 和 findIndex 异同点?

  • reduce 方法接收两个参数,第一个参数是回调函数(callback) ,第二个参数是初始值(initialValue)。
  • reduceRight 方法除了与reduce执行方向相反外(从右往左),其他完全与其一致。

除了常规遍历,另外说了4对遍历方法,在项目中也会用到了,大家学会了吗~~~