Javascript六种迭代器,forEach,every迭代器,some迭代器,reduce迭代器,map迭代器,filter迭代器
Javascript六种迭代器,forEach,every迭代器,some迭代器,reduce迭代器,map迭代器,filter迭代器
一、forEach
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数,该方法没有返回值。注意: forEach() 对于空数组是不会执行回调函数的。
array.forEach(function(value, index, arr),caller){
.....
}
value数组里的元素值 index 数组下标 arr数组 caller函数指定的this作用域
打印
更改第二个参数,指定函数的this为person
let arr = [1,2,3]; let person = {name:"yoyo"}; let car = {name:"宝马"}; let bool = arr.forEach(function(value,index,arr){ console.log(value,index,arr); console.log(this); },person)
打印
二、every
every() 方法使用指定函数检测数组中的所有元素:如果数组中检测到有一个元素不满足,
则整个表达式返回 false ,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回 true,默认情况下返回false。
注意: every() 对于空数组是不会执行回调函数的。
array.every(function(value, index, arr),caller){
.....
}
value数组里的元素值 index 数组下标 arr数组 caller函数指定的this作用域
let arr = [1,2,3,4,5]; let bool = arr.every(function(value,index,arr){ return value - 5 <= 0; }) console.log(bool);
打印
默认情况下返回false空数组返回true,空数组回调函数不执行
let arr = [1,2,3,4,5]; let bool = arr.every(function(value,index,arr){ console.log("执行1") }) console.log(bool); arr = []; bool = arr.every(function(value,index,arr){ console.log("执行2") }) console.log(bool);
打印
三、some
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。注意:不会对空数组进行检测。。
array.some(function(value, index, arr),caller){
.....
}
value数组里的元素值 index 数组下标 arr数组 caller函数指定的this
默认情况下返回false,空数组回调函数不执行
let arr = [1,2,3,4,5]; let bool = arr.some(function(value,index,arr){ console.log("执行1"); return value > 1 }) console.log(bool); arr = []; bool = arr.some(function(value,index,arr){ console.log("执行2") }) console.log(bool);
打印
四、Reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
注意: reduce() 对于空数组是不会执行回调函数的。。
array.some(function(total,value, index, arr),initTotal){
.....
}
total初始值, 或者计算结束后的返回值 value数组里的元素值 index 数组下标 arr数组 initTotal传递给函数的初始值
let arr = [1,2,3]; let num = arr.reduce(function(total,value,index,arr){ console.log("下标",index); return total + value; },-1) console.log(num);
打印
如果后面initTotal没有的话,函数默认从数组下标1开始,initTotal默认为数组下标0的值。
let arr = [1,2,3]; let num = arr.reduce(function(total,value,index,arr){ console.log("下标",index); return total + value; }) console.log(num);
打印
reduceRight和Reduce方法差不多,不同点在于它是从右到左执行
let arr = [1,2,3,4,5]; let result = arr.reduceRight(function(total,value,index,arr){ console.log(index); return total + value; }) console.log(result);
打印,可以看到执行时,数组下标从后面开始
五、map
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
注意: map() 不会对空数组进行检测
array.map(function(value, index, arr),caller){
.....
}
array.filter(function(value,index,arr), caller)
value数组里的元素值 index 数组下标 arr数组 caller函数指定的this
let arr = [1,2,3]; let result = arr.map(function(value,index,arr){ return value * value; }) console.log(result);
打印
如果函数里不return
let arr = [1,2,3]; let result = arr.map(function(value,index,arr){ value * value; }) console.log(result);
打印可以看到返回的都是undefined
如果数组是空数组
let arr = []; let result = arr.map(function(value,index,arr){ console.log("执行回调函数") }) console.log(result);
打印,可以看到map里的回调函数不执行,map返回一个空数组
六、filter
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
array.filter(function(value,index,arr), caller)
value数组里的元素值 index 数组下标 arr数组 caller函数指定的this
let arr = [1,2,3,4]; let result = arr.filter(function(value,index,arr){ if(value > 2){ return true; } }) console.log(result);
打印
如果数组为空
打印,数组为空时,filter里的回调函数不执行,filter返回一个空数组
^-^好记性不如烂笔头,有些东西看看很简单,但是往往一些别人写的复杂的东西就是这些简单积累下来的成果!!!!