前端面试题:javascript中reduce的用法?
reduce是一个用于数组的一个方法,虽然平时用的时候不多,但是熟悉了解了它的用法之后,会慢慢真香啦,可以帮助很快实现一些业务逻辑比较复杂的操作,加快代码的开发效率,会喜欢上用它啦~
1.语法:
arr.reduce(function(prev,cur,index,arr){
...
}, init);
其中:
arr
:表示原数组,
prev
:表示上一次回调时的返回值或者计算结束后的返回值,或者初始值init
cur
:表示当前正在处理的数组元素
index
:表示当前正在处理的数组元素的索引,若提供init的值,则索引为0,否则索引为1
prev,cur
的值是必需项,arr,index
是可选项
2.例子
1.求数组项之和:
var arr=[4,3,5,6,7,8,30];
var sum=arr.reduce(function(pre,cur){
return pre+cur
},0)
上面代码中,传入的初始值是0
,所以刚开始的时候pre
的值是0
,然后对arr数组进行遍历,cur
的值为数值第一项,0+4
相加之后返回4
,4
是计算后的值作为下一轮回调的pre
的值,然后继续与数组的下一项进行相加,即4+3=7
,以此类推,直到遍历完所有数组项计算完和
并返回
数组去重
2.数组去重
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
上面代码的原理是:
① 初始化一个空数组[ ]
② 将需要去重处理的数组中的第1项在初始化数组[ ]中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组[ ]中
③ 将需要去重处理的数组中的第2项在初始化数组[ ]中查找,如果找不到,就将该项继续添加到初始化数组[ ]中
④ ……
⑤ 将需要去重处理的数组中的第n项在初始化数组[ ]中查找,如果找不到,就将该项继续添加到初始化数组[ ]中
⑥ 将这个初始化数组[ ]返回
3.其他用法
todoTotall(){
return this.todos.reduce((pre,cur)=>{
return pre+(cur.done?1:0);
},0)
上面代码中:pre
的初始值是0
,cur
是当前的this.todos
的数组,通过遍历cur
的值,判断它的done
值是否为true
,如果为true
,就和当前pre
的值加1
,为false
加0
,并作为pre
下一次的回调的值,直到遍历完cur
的值并返回结果。
注:当然,通过上面几个例子了解了reduce的原理后,reduce还可以用于数组其他的处理逻辑里来加快代码的编写啦,有什么不懂的评论区留言哦~如果觉得我的文章对你有帮助,小手手点赞支持一下下啦