持续创作,加速成长!这是我参与「掘金日新计划 · 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。
- some为数组中的每一个元素执行一次callback函数,直到找到一个使得callback返回一个
-
every-
用于检测数组中的所有元素是否都满足指定条件,会遍历数组的每一项,如果有有一项不满足条件,则表达式返回false,剩余的项将不会再执行检测;如果遍历完数组后,每一项都符合条,则返回true。
-
语法
array.every(function(currentValue,index,arr), thisValue) -
示例
const arr = [ {isShow: false}, {isShow: true}, {isShow: false} ] arr.every(item => item.isShow) // 结果 falseevery 若某一元素不满足条件,返回 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) // 结果 1findIndex 它返回数组中找到的元素的索引,而不是其值,如果不存在返回 -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对遍历方法,在项目中也会用到了,大家学会了吗~~~