js小笔记 数组方法 reduce() 妙用

原创 63966249 随笔 javaScript 40阅读 22 天前 举报

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),
当前元素值,当前索引,调用 reduce 的数组。

arr.reduce(callback,[initialValue])
callback (执行数组中每个值的函数,包含四个参数)

previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))or (第一项的值或者上一次叠加的结果值)
currentValue (数组中当前被处理的元素)or (当前会参与叠加的项)
index (当前元素在数组中的索引)or (当前值的索引)
array (调用 reduce 的数组)or (数组本身)
initialValue (作为第一次调用 callback 的第一个参数。)

首先我们要区分prev与cur这2个参数的区别,刚开始的时候我以为他们是一种类型的,可是后来我发现我理解错了。prev表示每次叠加之后的结果,类型可能与数组中的每一项不同,而cur则表示数组中参与叠加的当前项。

小例子加深理解:
var arr = [1, 2, 3, 4, 5];
sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prevres, cur, index);
return prevres + cur;
})
console.log(arr, sum);

输出:
1 2 1
3 3 2
6 4 3
10 5 4
结果为 15

var arrString = 'abcdaabc';

arrString.split('').reduce(function(pre, cur) {
pre[cur] ? pre[cur] ++ : pre[cur] = 1
// console.log('是pre' + pre,'是cur' + cur)
return pre;
}, {})

输出:{a: 3, b: 2, c: 2, d: 1}

[1, 2].reduce(function(res, cur) {
res.push(cur + 1);
return res;
}, [])

由于可以通过第二参数设置叠加结果的类型初始值,因此这个时候reduce就不再仅仅只是做一个加法了,我们可以灵活的运用它来进行各种各样的类型转换,比如将数组按照一定规则转换为对象,也可以将一种形式的数组转换为另一种形式的数组,大家可以动手去尝试一样。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复