为了账号安全,请及时绑定邮箱和手机立即绑定

抛出预期错误:RangeError:数组长度无效

抛出预期错误:RangeError:数组长度无效

RISEBY 2021-11-12 15:00:43
我有一个简单的阶乘函数: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;

  }

}


查看完整回答
反对 回复 2021-11-12
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

如果给你一个负数,你试图创建一个长度 < 0 的数组,这会导致你的错误。你需要处理负面

Array(Math.abs(n))

这将创建一个长度数组,无论它是正数还是负数。


查看完整回答
反对 回复 2021-11-12
?
翻阅古今

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;

  }

}  


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 508 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信