[js数组的遍历方式]
forEach()函数
arr.forEach( )方法允许为数组的每个元素都运行一个函数,forEach( )方法也是我们遍历数组用的比较多的方法,forEach( )函数接收一个回调函数,参数分别表示当前执行的元素的值,当前值的索引和数组本身。
for循环
map( )函数
map( )不改变原数组,它对数组的每个元素都调用函数,并返回结果数组。
注意:在map( )函数的回调函数中需要通过return将处理后的值进行返回,否则会返回undefined.
some( )函数与every( )函数
some( )函数与every( )函数的相似之处都是在对数组进行遍历的过程中,判断数组中是否有满足条件的元素,如果有满足条件的就返回true,否则返回false.
some()与every()的区别在于:some( )函数只要数组中某个元素满足条件就返回true,不会在对后面的元素进行判断。而every( )函数是数组中每个元素都要满足条件时才会返回true.
- 要判断数组中是否有大于6的元素的时候,可以通过
some( )函数来处理。 - 而要判断数组中是否所有的元素都大于6,则需要通过
every( )函数来处理
find( )函数
find( ) 函数用于数组的遍历,当找到第一个满足条件的元素值时,则直接返回该元素值,如果都找不到满足条件的,则返回undefined。find( )方法的参数与forEach是一样的
filter( )函数
filter方法是应用于过滤的方法,但是它也可以遍历函数
reduce( )函数
reduce函数常用于对数组中的元素做累加的处理,也可以遍历数组
reduce函数最主要的作用就是做累加的操作,该函数接收一个函数作为累加器,将数组中的每个元素从左到右依次执行累加器,返回最终的处理结果
for of & for in(不推荐)
首先两者都可用于遍历
for of
for…of 语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句.
for in
- 一般用于遍历对象的可枚举属性(一般用于遍历对象的key),以及对象从构造函数原型中继承的属性。对于每个不同的属性,语句都会被执行。
- 不建议使用for in 遍历数组,因为输出的顺序是不固定的。
- 如果迭代的对象的变量值是null或者undefined, for in不执行循环体,建议在使用for in循环之前,先检查该对象的值是不是null或者undefined
for in 和for of的区别
-
for of遍历的是数组元素值,而且for of遍历的只是数组内的元素,不包括原型属性和索引for of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象(iterator)的集合,但是不能遍历对象,因为没有迭代器对象,但如果想遍历对象的属性,你可以用for in循环(这也是它的本职工作)或用内建的Object.keys()方法 -
for in更适合遍历对象,当然也可以遍历数组,但是会存在一些问题,index索引为字符串型数字,不能直接进行几何运算,使用for in会遍历数组所有的可枚举属性,包括原型,如果不想遍历原型方法和属性的话,可以在循环内部判断一下,使用hasOwnProperty()方法可以判断某属性是不是该对象的实例属性for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值for in总是得到对象的key或数组、字符串的下标for of总是得到对象的value或数组、字符串的值
map与forEach的区别
定义:
- forEach() 针对每一个元素执行提供的函数。
- map()创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来。
区别:
- forEach()返回值是undefined,不可以链式调用。
- 没有办法终止或者跳出forEach( )循环(不能使用break),除非抛出异常,使用return也不能返回到外层函数,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用Array.every()或者Array.some();
- map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错
- forEach( )允许callback更改原始数组的元素。map()返回新的数组,原数组不会改变。
- 性能方面,for循环是在有js的时候就有了,forEach()和map()是es5的时候出来的,单纯从性能上说,map和forEach方法是远远落后for语句的,而map( )还需要返回一个等长的数组。for性能最好,其次是forEach,再者是map
- forEach 方法,是最基本的方法,就是遍历与循环,默认有 3 个传参:分别是遍历的数组内 容 item、数组索引 index、和当前遍历数组 Array
- map 方法,基本用法与 forEach 一致,但是不同的,它会返回一个新的数组,所以 callback 需要有 return 值,如果没有,会返回 undefined