一、迭代器
注意点:
所有的迭代方法都有以下几个特点
1. 不能使用 break 以及 continue 关键字来中断遍历迭代
2. 所有的遍历都是静态遍历,在遍历最开始的时候就已经确定了要遍历多少次,这个次数只小于或等于原来的数组长度
1、forEach
数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱。对数组的每个元素执行一次提供的函数,不能使用break、return。
参数:
item 代表当前遍历的这一项
index 代表当前遍历的这一项的索引
_arr 代表当前正在遍历的数组
let num = arr.forEach((item, index, _arr)=>{
console.log(item + "-------------"+index);
})
console.log(num); //undefined
2、 map。在node.js环境中会返回一个布尔值
它也是一个迭代方法,它与forEach非常相似,唯一的不同点就可以将每一次迭代的回调函数的返
回值接收下来,然后组成一个新的数组,返回出去。实际效率还比不上foreach
var arr = [4, 7, 8, 5, 9, 3];
let num2 = arr.map((item, index, _arr)=>{
console.log(item + "-------------"+index);
return item
})
console.log(num2); // [4, 7, 8, 5, 9, 3]
3、 filter
该方法与map方法非常相似,它会在原数组里面返回符合指定条件的元素,然后将这些元素组成
数组返回到外边
var arr = [4, 7, 8, 5, 9, 3];
let num3 = arr.filter((item, index, _arr)=>{
console.log(item + "-------------"+index);
return item%2==0
})
console.log(num3); // [4,8]
4、every
对数组中的每个元素都执行一次指定的函数(callback),回调函数返回一个条件,它根据这个条件来决定返回 ,每个都满足返回true否则返回false
var arr = [4, 7, 8, 5, 9, 3];
let num4 = arr.every((item, index, _arr)=>{
// console.log(item + "-------------" + index);
return item == 3
})
console.log(num4); false
5、some
该方法参照 every 方法,只要有一个满足就返回true否则返回false
var arr = [4, 7, 8, 5, 9, 3];
let num5 = arr.some((item, index, _arr)=>{
// console.log(item + "-------------" + index);
return item ==3
})
console.log(num5); // true
二、reduce的使用
和迭代方法(map、fliter、forEach,every,some)一样,会遍历数组;reduce()方法会遍历数组中的每一个元素,每遍历一次就会执行一次回调函数。当遍历完之后会将最后的结果返回出去。
2、reduce( )方法有两个参数,
第一个参数是累加函数有第四个参数分别是:prev,current,index,_arr,后两个参数为可选参数,
参数:
- prev 代表前一个的回调函数的返回值【这一次回调函数的返回值会作为下一次回调函数当中的prev使用】
- current 代表当前遍历的这一次的值【 reduce 是从数组的第二项元素开始的】
- index 代表当前遍历的索引
- _arr 代表当前正在操作的这个数组
第二个是函数的prev的初始值(可自定)。
语法:arr.reduce(callback,[prev])
举例:
let result = arr.reduce(function (prev,current,index,_arr){
document.write(prev,'-------',current,'-------',index,"<br>")
},6)
结果:
prev:默认是数组的第一个数,但这里设置了6,
所以打印 6--------4--------0
1、 数组累加
var arr = [1,2,3,4]
let result = arr.reduce(function (prev,current,index,_arr){
document.write(prev,'-------',current,'-------',index,"<br>")
var sum = prev+current
return sum
})
document.write(result)
结果:
1-------2-------1
3-------3-------2
6-------4-------3
10
2、数组求最大元素
var arr = [1,2,3,4]
let result = arr.reduce(function (prev,current,index,_arr){
document.write(prev,'-------',current,'-------',index,"<br>")
var sum = prev>current?prev:current
return sum
})
document.write(result)
结果:
1-------2-------1
2-------3-------2
3-------4-------3
4