js数组遍历的方式 | 青训营

32 阅读2分钟

for :循环遍历

while:循环

for..in :效率最低的遍历,输出的是数组的索引,遍历的是对象则输出对象的属性名

for..of (ES6) :不能循环遍历对象,因为Object对象没有iterator接口,性能相比for..in有稍微提升

forEach :

  • 有几个元素,forEach里的回调函数就执行几次
  • 在循环次数不确定或者需要计算而且复杂的情况下,效率比for循环高
  • 循环的数组元素是基本数据类型,不会改变原数据的数据,循环的数组元素为对象,会改变原数组的对象属性的值
  • 循环过程中不支持修改索引
  • 不能使用break和continue跳出整个循环或当前循环的,但是结合try...catch可以实现跳出循环
  • 第一个参数是数组里的元素,第二个参数为数组里元素的索引,第三个参数则是它自己(利用第三个参数可以进行数组去重)

map遍历 :

  • 遍历每一个元素并且返回对应的元素(可以返回处理后的元素) (map 映射 一一 对应)
  • 返回创建的新数组和原来旧数组的长度是一样的,使用比较广泛,但其性能还不如 forEach
  • 不能使用break和continue跳出整个循环或当前循环的,但是结合try...catch可以实现跳出循环

filter(ES6):遍历数组,过滤出符合条件的元素并返回一个新数组,没有则返回空数组

some(ES6):遍历数组,只要有一个以上的元素满足条件就返回true,否则返回false

every(ES6):每个元素都符合条件,则返回true,否则false

find(ES6):返回符合条件的第一个元素,没有则返回undefined

findIndex(ES6):返回符合条件的第一个元素的索引,没有则返回-1

reduce() :遍历数组的全部元素,将函数返回值累加,并返回这个累加值,可以用于赋初值

let sum = arr.reduce((accumulator,currentValue) => { //accumulator为每次迭代后的累计值,currentValue为每次迭代时从arr传来的元素值 return currentValue * 2 + accumulator},100) //将数组中每一个元素都乘以2累加并加上初始值100console.log(sum); //156