zoukankan      html  css  js  c++  java
  • 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返回一个空数组

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

  • 相关阅读:
    UVA 10564 Paths through the Hourglass DP
    HDU 3397 Sequence operation 线段树 成段更新 区间合并
    HDU 3308 LCIS 线段树 单点更新+区间合并
    POJ 3667 Hotel 线段树 区间合并
    UVALive 3942 Remember the Word Tire+DP
    POJ 1703 Find them, Catch them
    UVA 1366 Martian Mining DP
    UVA 1456 Cellular Network 贪心+DP
    UVA 11573 Ocean Currents
    【ACM】hdu_zs1_1003_放大的X _201307271557
  • 原文地址:https://www.cnblogs.com/kootimloe/p/13933577.html
Copyright © 2011-2022 走看看