(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));
我需要制作一个斐波那契数列,我在下面找到了这段代码。当我试图理解我看到的所有代码“(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));