我有一个简单的阶乘函数:
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 /未定义。
但是,我仍然遇到错误。我不确定其他如何解释无效范围,坦率地说,我不明白它指的是什么。
我还尝试在try-catch
中抛出“ rangeError”:
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
答案 0 :(得分:3)
如果给定负数,则尝试创建长度<0的数组,这会导致错误。您需要处理底片
Array(Math.abs(n))
这将创建一个长度为长度的数组,无论它是正数还是负数。
答案 1 :(得分:3)
您需要将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;
}
}
答案 2 :(得分:3)
该问题的描述说,当n
小于0
且大于12
时,您需要引发RangeError。因此,在此之前使用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;
}
}