在JavaScript的ES5版本中Array数组的reduce方法详解

函数声明:reduce(callback[, initialValue])

参数说明:

callback - 回调函数,格式为function (prev,next)

initialValue - 初始值,可选参数

返回值:最后一次执行callback 回调函数的返回值


运行机制:

var arr = ['a', 'b', 'c', 'a', 'd'];
var i = 0;
arr.reduce(function (prev, next) {
    i++;
    console.log('第' + i + '次循环:', prev, next);
    return prev + next;
});
//VM418:3 第1次循环: a b
//VM418:3 第2次循环: ab c
//VM418:3 第3次循环: abc a
//VM418:3 第4次循环: abca d
//"abcad"

采用reduce(callback)调用方式时:

第一次循环,prev=数组的第一个元素,next=数组的第二个元素

第二次循环,prev=第一次循环的返回值,next=数组的第三个元素;

之后的每一次循环,prev=上一次循环的返回值,next=数组的下一个元素,直到数组末尾。

var arr = ['a', 'b', 'c', 'a', 'd'];
var i = 0;
arr.reduce(function (prev, next) {
    i++;
    console.log('第' + i + '次循环:', prev, next);
    return prev + next;
}, 'n');
//VM421:3 第1次循环: n a
//VM421:3 第2次循环: na b
//VM421:3 第3次循环: nab c
//VM421:3 第4次循环: nabc a
//VM421:3 第5次循环: nabca d
//"nabcad"

采用reduce(callback, initialValue)调用方式时

第一次循环,prev=initialValue,next=数组的第一个元素

第二次循环,prev=第一次循环的返回值,next=数组的第个元素;

之后的每一次循环,prev=上一次循环的返回值,next=数组的下一个元素,直到数组末尾。


是否传递initialValue参数的区别:

采用reduce(callback)方式,在第一次循环时,prev=数组的第一个元素,next=数组的第二个元素;
采用reduce(callback, initialValue)方式,在第一次循环时,prev=initialValue,next=数组的第一个元素。


统计元素个数实例:

var arr = ['a', 'b', 'c', 'a', 'd'];
var i = 0;
arr.reduce(function (prev, next) {
    i++;
    console.log('第' + i + '次循环:', prev, next);
    prev[next] = (prev[next] + 1) || 1;
    return prev;
}, {});
//VM424:3 第1次循环: Object {} a
//VM424:3 第2次循环: Object {a: 1} b
//VM424:3 第3次循环: Object {a: 1, b: 1} c
//VM424:3 第4次循环: Object {a: 1, b: 1, c: 1} a
//VM424:3 第5次循环: Object {a: 2, b: 1, c: 1} d
//Object {a: 2, b: 1, c: 1, d: 1}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值