【问题标题】:Recursively appending to an array with ternary operator not working使用三元运算符递归附加到数组不起作用
【发布时间】:2020-11-14 11:17:10
【问题描述】:

我正在尝试创建一个递归函数,该函数返回一个数字范围内的整数数组。

如果我使用三元运算符,基本情况会返回“未定义”。我看不出问题出在哪里。

使用 JSLint 我收到以下消息:“在括号中包装一个三元表达式,在左括号后有一个换行符。”

代码:

function rangeOfNumbers(startNum, endNum) {
  return startNum === endNum
    ? startNum
    : rangeOfNumbers(startNum, endNum - 1).concat(endNum);
}

【问题讨论】:

  • 如果你这样尝试会发生什么? (startNum === endNum) ? startNum : rangeOfNumbers(startNum, endNum - 1).concat(endNum);
  • 我认为您需要将 startNum 作为数组返回。否则它不能只是连接一个数字。
  • @kvr 我认为这将使 JSLint 警告消失。但这不应该是函数返回undefined 的原因。三元运算符的运算符优先级低于表达式中的任何其他运算符,因此它应该以 OP 期望的方式解析。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @kvr JSLint 警告不断显示,如果我使用 rangeOfNumbers(5, 5) 调用函数,函数会不断返回“未定义”

标签: javascript arrays recursion conditional-operator


【解决方案1】:

在您的原始示例中,您只是返回了 startNum,它是一个数字。相反,我们希望返回一个包含 startNum 的数组,以便在返回时连接该值。

试试这个:

function rangeOfNumbers(startNum, endNum) {
  return startNum === endNum
    ? [startNum]
    : rangeOfNumbers(startNum, endNum - 1).concat(endNum);
}

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2011-08-30
    相关资源
    最近更新 更多