【问题标题】:(JavaScript) Why my if/else code didn't work? [duplicate](JavaScript) 为什么我的 if/else 代码不起作用? [复制]
【发布时间】:2021-10-28 04:56:25
【问题描述】:

我需要制作一个斐波那契数列,我在下面找到了这段代码。当我试图理解我看到的所有代码“(i

堆栈溢出代码:

function fib(n) {
  return new Array(n).fill(1).reduce((arr, _, i) => {
    arr.push((i <= 1) ? i : arr[i - 2] + arr[i - 1])
    return arr
  }, []);
}
console.log(fib(10))

我的代码带有(如果 else 则扩展):

function fib(n) {
  return new Array(n).fill(1).reduce((arr, _, i) => {
    arr.push(
      if (i <= 1) {
        i
      } else {
        arr[i - 2] + arr[i - 1]
      })
    return arr
  }, []);
}
console.log(fib(10))

为什么我的代码和上面的代码不等价?

【问题讨论】:

标签: javascript if-statement conditional-operator


【解决方案1】:

基本上是@esqew 所说的。

“我认为这是一个简单的 if else 快捷条件” 有点接近真实,任何旧的if/else 都不是插入式 替换最初使用 三元运算符?

直接将Conditional Operator 替换为if statement 会引发错误。

如果您想在函数参数中使用if/else 语法,您可以将代码编写为IIFE 形式的函数。

(() => {
  if (i <= 1) {
    return i;
  } else {
    return arr[i - 2] + arr[i - 1];
  }
})();

演示:

function fib(n) {
  return new Array(n).fill(1).reduce((arr, _, i) => {
    arr.push(
      (() => {
        if (i <= 1) {
          return i;
        } else {
          return arr[i - 2] + arr[i - 1];
        }
      })()
    );
    return arr;
  }, []);
}

console.log(fib(10));

【讨论】:

  • 谢谢!!现在我明白了。
猜你喜欢
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2013-06-20
  • 2016-12-21
相关资源
最近更新 更多