Javascript Array Reduce 用法解读

Array Reduce 的用法已经在spec里讲的很清楚了,基本用法如下:

[0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
  return previousValue + currentValue;
});
 
 

回调被执行四次,每次的参数和返回值如下表:

  previousValue currentValue index array return value
first call 0 1 1 [0,1,2,3,4] 1
second call 1 2 2 [0,1,2,3,4] 3
third call 3 3 3 [0,1,2,3,4] 6
fourth call 6 4 4 [0,1,2,3,4] 10

reduce 的返回值是回调函数最后一次被调用的返回值(10)。

但是有一次用的时候还是出了问题:

var Array = [{count: 10 , user_id: 'zhangziyi'}, {count: 100, user_id: 'Angelababy'}];
array.reduce(function(x,y){  return x.count + y.count;});

这个写法看似正确的,执行也能得到正确的结果:110。 但是如果数组有3个以上的数据,执行这个结果变成了Null.

var Array = [{count: 10 , user_id: 'zhangziyi'}, {count: 100, user_id: 'Angelababy'}, {count: 140 , user_id: 'Zhaowei'}];
array.reduce(function(x,y){  return x.count + y.count;});
仔细研究发现这执行的是一下情况:

第一次: return : x.count + y.count = 10+100=110; 

第二次: return: 110.count + 140 =null;;

所以对象元素使用reduce正确的做法应该是:

var countObj = array.reduce(function(x,y){  var temp = {};  temp.count = x.count + y.count;  return temp }); 
执行完了,取出数据即可: 

var total = countObj.count; 
这样就得到了想要的结果: 250.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值