TypeError:减少没有初始值的空数组

使用reduce函数。

消息

TypeError:减少没有初始值的空数组(基于V8和Firefox&Safari)

错误类型

出了什么问题?

在JavaScript中,有几个reduce函数:

这些函数可以选择使用initialValue(初始值)(将用作的第一个调用的第一个参数回调). 但是,如果没有首字母值,它将使用阵列类型数组作为初始值。当空数组时会引发此错误提供,因为在这种情况下无法返回初始值。

示例

无效案例

与过滤器结合使用时,此问题经常出现(Array.prototype.filter(),TypedArray.prototype.filter())这将删除列表中的所有元素。因此,不留任何字符作为首字母值。

js公司
常数整数=[0,-1,-2,-3,-4,-5];整数.filter((x)=>x>0)//删除所有元素.减少((x,y)=>x+y);//没有其他元素可用于初始值。

类似地,如果选择器中出现错误或意外,也会发生相同的问题列表中的元素数:

js公司
const names=document.getElementsByClassName(“名称”);const name_list=数组原型.reduce.call(姓名,(acc,name)=>acc+“,”+名称,);

有效案例

这些问题可以用两种不同的方式解决。

一种方法是实际提供initialValue(初始值)作为中性元素运算符,例如0表示加法,1表示乘法,或空字符串表示串联。

js公司
常数整数=[0,-1,-2,-3,-4,-5];整数.filter((x)=>x>0)//删除所有元素.减少((x,y)=>x+y,0);//初始值是加法的中性元素

另一种方法是在调用之前处理空案例减少,或在添加意外的伪初始值后在回调中。

js公司
const names=document.getElementsByClassName(“名称”);let nameList1=“”;if(names.length>=1){nameList1=数组原型.reduce.call(姓名,(acc,name)=>`${acc},${name}`,);}//名称为空时,nameList1===“”。const nameList2=数组原型.reduce.call(姓名,(acc,name)=>{如果(acc===“”)//初始值返回名称;返回`${acc},${name}`;},"",);//名称为空时,nameList2===“”。

另请参见