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版权协议,转载请附上原文出处链接和本声明。