(JavaScript) 为什么我的 if/else 代码不起作用?

(JavaScript) Why my if/else code didn't work?

我需要制作一个斐波那契数列,我在下面找到了这段代码。当我试图理解我看到的所有代码“(i <= 1) ? i : arr[i-2] + arr[i-1]”时,我认为这是一个简单的 if else 快捷条件,我尝试替换通过扩展的方式只是为了确定(见最后的代码)。但是现在代码不起作用...

Whosebug 代码:

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))

我的代码(否则扩展):

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))

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

基本上是@esqew所说的。

“I thought that was an simple if else shortcut condition” While this is kind of close to true, any old if/else is not a drop-in replacement for something that was originally written using the ternary operator ?

直接用 if statement 替换 Conditional Operator 会抛出错误。

如果您想在函数参数中使用 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));