【问题标题】:Expected error was thrown: RangeError: Invalid array length引发了预期的错误:RangeError: Invalid array length
【发布时间】:2019-10-07 18:06:46
【问题描述】:

我有一个简单的阶乘函数:

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;
  }
}  

但由于某种原因,这是在codewars 中抛出Expected error was thrown: RangeError: Invalid array length

我试图通过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

【问题讨论】:

    标签: javascript arrays try-catch reduce


    【解决方案1】:

    您需要将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】:

      如果给你一个负数,你试图创建一个长度

      Array(Math.abs(n))
      

      这会创建一个长度为正数或负数的数组。

      【讨论】:

      • 抱歉,这对我来说是一个错误let array = Array(Math.abs(n).fill(0).map((e, i) =&gt; i + 1)); --> TypeError: Math.abs(...).fill is not a function
      • 您错过了)Array(Math.abs(n)).fill(0)。我还建议查看其他答案,因为它们对您链接的代码战问题有正确的回答。
      【解决方案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;
        }
      }  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 2018-04-28
        • 2021-08-10
        • 1970-01-01
        相关资源
        最近更新 更多