使用reduce报TypeError: Reduce of empty array with no initial value处理方法

17 篇文章 0 订阅
7 篇文章 0 订阅

报错截图:

在这里插入图片描述
大致为:

ERROR Error: Uncaught (in promise): TypeError: Reduce of empty array with no initial value
TypeError: Reduce of empty array with no initial value
    at Array.reduce (<anonymous>)

报错原因:

Reduce函数有选择性的接收 initialValue (将会被用作回调函数第一次被调用的参数)。然而,如果没有初始值提供,它会用 Array 或 TypedArray 的第一个元素作为初始值。当提供一个空数组的时候这个错误会出现,因为那种情况下没有初始值被返回

解决方式:

1.提供一个初始值作为操作符的中立元素,比如加法里的0,乘法里的1,或者是合并中的一个空字符串
实践代码:
abnormalSum = res.result.filter(item => item.inv_type == 'ct_abnormal_qty').map(item => {
        let sum = 0
        sum += item.qty
        return sum
      }).reduce((prev, cur) => {
        return prev + cur;
      }, 0);     //后边0为设置的初始值
2.两方处理空的情况,要么在调用 reduce 之前,或者是在添加一个未预料的初始虚拟址后的回调函数中
参考代码:
var names = document.getElementsByClassName("names");
var name_list1 = "";
if (names1.length >= 1)
  name_list1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
// name_list1 == "" when names is empty.
var name_list2 = Array.prototype.reduce.call(names, (acc, name) => {
  if (acc == "") // initial value
    return name;
  return acc + ", " + name;
}, "");
// name_list2 == "" when names is empty.

参考链接:MDN官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值