我有一个简单的阶乘函数:function factorial(n){ let array = Array(n).fill(0).map((e, i) => i + 1) if (array.length) return array.reduce((a, b) => a * b); else { return 1; }} 但由于某些原因,这是扔Expected error was thrown: RangeError: Invalid array length在codewars。我试图通过if-else块解释数组长度为 0 / 未定义。但是,我仍然收到错误消息。我不确定如何解释无效范围,坦率地说,不明白它指的是什么。我还尝试在以下范围内抛出“rangeError” try-catch:function factorial(n) { try { let array = Array(n) .fill(0) .map((e, i) => i + 1); return array.reduce((a, b) => a * b); } catch (error) { if (error instanceof TypeError) { throw new error(); } else if (error instanceof RangeError) { throw new error(); } else { throw error; } }}事实上,这造成了第二个错误: TypeError: error is not a constructor
3 回答
HUH函数
TA贡献1836条经验 获得超4个赞
您需要RangeError按照以下指定的值将其扔到那里0 or greater than 12
function factorial(n) {
if(n < 0 || n > 12){
throw new RangeError('')
}
let array = Array(n).fill(0).map((e, i) => i + 1)
if (array.length) return array.reduce((a, b) => a * b);
else {
return 1;
}
}
吃鸡游戏
TA贡献1829条经验 获得超7个赞
如果给你一个负数,你试图创建一个长度 < 0 的数组,这会导致你的错误。你需要处理负面
Array(Math.abs(n))
这将创建一个长度数组,无论它是正数还是负数。
翻阅古今
TA贡献1780条经验 获得超5个赞
问题的描述说你需要在n小于0和大于时抛出 RangeError 12。所以只需使用if之前的语句,你就会通过。
function factorial(n){
if(n < 0 || n > 12){
throw RangeError;
}
let array = Array(n).fill(0).map((e, i) => i + 1)
if (array.length) return array.reduce((a, b) => a * b);
else {
return 1;
}
}
添加回答
举报
0/150
提交
取消