js,forEach如何传递参数

forEach是es6新增的数组方法,本意是传递一个函数,然后循环数组调用该函数,如下

let arr = [{
        a:1
    },
    {
        b:2
    }]
    arr.forEach((ele,index,arr)=>{
        console.log(ele);
    })

其中这个函数接受三个参数,第一个是当前循环的元素,第二个是索引值,第三个是当前调用forEach的数组,输出如下

这样似乎就完了,但是有的场景中需要一些特殊的情况,比如

let arr = [{
        a:1,
        flag:null
    },
    {
        b:2,
        flag:null
    }]
    let selectArr = [false,true];
    arr.forEach((ele,index,arr)=>{
        console.log(ele);
    })

数组中的对象有一个空的字段,该字段需要实时的从selectArr中获取与当前索引所对应的值去赋值,(当然直接在循环的时候传入也可以,但是这里只是假设一种情况,假设seleceArr随时会变化,我们需要获取循环当下的值)这时就可以用下面的写法;

let arr = [{
        a: 1,
        flag: null
    },
    {
        b: 2,
        flag: null
    }]
    let selectArr = [false, true];
    arr.forEach(traverse(selectArr))
    function traverse(ar) {//遍历方法
        return (ele, index, arr) => {
            ele.flag = ar[index] //将selectArr对应的项插入
            console.log(ele);
        }
    }

这里利用了闭包,高阶函数,在traverse函数中返回一个函数,这个函数会作为参数反馈给forEach,这样这个返回的函数就可以调用到传递来的selectArr了。

 


版权声明:本文为zhkkky原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。