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作用域

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);
},car)
console.log(bool);//该方法没有返回值 undefined

打印

 更改第二个参数,指定函数的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);

打印

如果数组为空

let arr = [];
let result = arr.filter(function(value,index,arr){
    console.log(index);
    return true;
})
console.log(result);

打印,数组为空时,filter里的回调函数不执行,filter返回一个空数组

^-^好记性不如烂笔头,有些东西看看很简单,但是往往一些别人写的复杂的东西就是这些简单积累下来的成果!!!! 

原文地址:https://www.cnblogs.com/kootimloe/p/13933577.html