【发布时间】:2020-08-14 14:00:08
【问题描述】:
我试图使用函数式编程创建一个偶数的斐波那契数列数组 - 下面的代码
let a = [1, 2];
const r = (n) =>
Array.from(
a[a.length - 1] + a[a.length - 2] <= n ?
a.push(a[a.length - 1] + a[a.length - 2]) && r(n) :
a
)
.filter(v => !(v % 2))
//.reduce((s, v) => s+=v, 0)
console.log(r(56))
它给出了正确的数组,但是当我想计算总和时(通过注释最后一行使用reduce方法)它给出0作为结果
let a = [1, 2];
const r = (n) =>
Array.from(
a[a.length - 1] + a[a.length - 2] <= n ?
a.push(a[a.length - 1] + a[a.length - 2]) && r(n) :
a
)
.filter(v => !(v % 2))
.reduce((s, v) => s+=v, 0)
console.log(r(56))
在 Repl.it (Link - https://repl.it/@rahul4sap/1)。但是,当我尝试在 Chrome 开发工具中粘贴相同的内容时,它会给出正确的输出。有人可以帮我解释一下为什么 Chrome 开发工具和 Repl.it 中的行为不同(我在本地节点服务器中看到的行为相同)
另外,如果有人也请帮我解决这个问题会很好(请注意,我想以尽可能多的功能方式解决这个问题)
提前致谢!
【问题讨论】:
-
请把所有相关代码放在这里,在问题中,所以它是独立的。
-
不要将命令式代码
+=与函数式成语混用。 -
你为什么使用
Array.from()?您希望通过它实现什么目标? -
好的,我明白了。你有一个递归函数 expects 返回一个数组。但是,如果您在末尾添加
.reduce,您的 递归调用 会产生纯数字,因此您会破坏该功能。因此,顶级reduce仅在空数组上执行。 -
感谢您指出问题 VLAZ 和@Steve Bennett。有什么方法可以通过函数式编程方式得到结果
标签: javascript node.js ecmascript-6 functional-programming