24个JavaScript循环遍历方法,你都知道吗?( 二 )

  • 可以使用break、continue、return来中断循环遍历;
  • 4. filter()filter()方法用于过滤数组 , 满足条件的元素会被返回 。它的参数是一个回调函数 , 所有数组元素依次执行该函数 , 返回结果为true的元素会被返回 , 如果没有符合条件的元素 , 则返回空数组 。其语法如下:
     array.filter(function(currentValue,index,arr), thisValue)
    • 1.该方法的第一个参数为回调函数 , 是必传的 , 它有三个参数:
    • currentValue:必须 。当前元素的值;
    • index:可选 。当前元素的索引值;
    • arr:可选 。当前元素属于的数组对象 。
     const arr = [1, 2, 3, 4, 5]arr.filter(item item > 2) // 输出结果:[3, 4, 5]同样 , 它也有第二个参数 , 用来绑定参数函数内部的this变量 。
    可以使用filter()方法来移除数组中的undefined、null、NAN等值:
    let arr = [1, undefined, 2, null, 3, false, '', 4, 0]arr.filter(Boolean)// 输出结果:[1, 2, 3, 4]注意:
    • filter 方法会返回一个新的数组 , 不会改变原数组;
    • filter 方法不会对空数组进行检测;
    • filter 方法仅适用于检测数组 。
    5. some()、every()some() 方法会对数组中的每一项进行遍历 , 只要有一个元素符合条件 , 就返回true , 且剩余的元素不会再进行检测 , 否则就返回false 。
    every() 方法会对数组中的每一项进行遍历 , 只有所有元素都符合条件时 , 才返回true , 如果数组中检测到有一个元素不满足 , 则整个表达式返回 false  , 且剩余的元素不会再进行检测 。其语法如下:
    两者的语法如下:
     array.some(function(currentValue,index,arr),thisValue)array.every(function(currentValue,index,arr), thisValue)两个方法的第一个参数为回调函数 , 是必传的 , 它有三个参数:
    • currentValue:必须 。当前元素的值;
    • index:可选 。当前元素的索引值;
    • arr:可选 。当前元素属于的数组对象 。
     let arr = [1, 2, 3, 4, 5]arr.some(item item > 4) // 输出结果: truelet arr = [1, 2, 3, 4, 5]arr.every(item item > 0) // 输出结果: true注意:
    • 两个方法都不会改变原数组 , 会返回一个布尔值;
    • 两个方法都不会对空数组进行检测;
    • 两个方法都仅适用于检测数组 。
    6. reduce()、reduceRight()reduce() 方法接收一个函数作为累加器 , 数组中的每个值(从左到右)开始缩减 , 最终计算为一个值 。reduce() 可以作为一个高阶函数 , 用于函数的 compose 。其语法如下:
     array.reduce(function(total, currentValue, currentIndex, arr), initialValue) reduce 方法会为数组中的每一个元素依次执行回调函数 , 不包括数组中被删除或从未被赋值的元素 , 回调函数接受四个参数:
    • total:上一次调用回调返回的值 , 或者是提供的初始值(initialValue);
    • currentValue:当前被处理的元素;
    • currentIndex:当前元素的索引;
    • arr:当前元素所属的数组对象 。
    该方法的第二个参数是 initialValue , 表示传递给函数的初始值 (作为第一次调用 callback 的第一个参数):
     let arr = [1, 2, 3, 4]let sum = arr.reduce((prev, cur, index, arr) => {console.log(prev, cur, index);return prev + cur;})console.log(arr, sum);输出结果:
     1 2 13 3 26 4 3[1, 2, 3, 4] 10再来加一个初始值试试:
     let arr = [1, 2, 3, 4]let sum = arr.reduce((prev, cur, index, arr) => {console.log(prev, cur, index);return prev + cur;}, 5)console.log(arr, sum);输出结果:
     5 1 06 2 18 3 211 4 3[1, 2, 3, 4] 15由此可以得出结论:如果没有提供初始值initialValue , reduce 会从索引1的地方开始执行 callback 方法 , 跳过第一个索引 。如果提供了初始值initialValue , 从索引0开始执行


    推荐阅读