为了账号安全,请及时绑定邮箱和手机立即绑定

.push() 和 .reduce() 在这里如何协同工作?

.push() 和 .reduce() 在这里如何协同工作?

www说 2023-10-20 16:13:57
我已经完成了一项作业,其中函数的输出是斐波那契数组的最后一个数字。说实话,我在这个问题上陷入了困境,我在 stackoverflow 上的第二个 else if 语句中找到了代码。但我无法理解它到底是如何工作的。这是代码:const fibonacci = function(input) {    let n = Number(input);        if (n === 1) {            return 1;        } else if (n < 1) {            return "OOPS";        } else if (n > 1) {            let array = new Array(n);                              // <---- Starting here            let filled = array.fill(1);            let reduced = filled.reduce((acc, _, i) => {                acc.push((i <=1) ? i : acc[i-2] + acc[i-1])                    return acc;                                      },[]);return reduced[n - 1] + reduced[n - 2];        }} 我的问题:为什么reduced返回一个数组而不是单个值?既然它返回一个数组 - 为什么push'ed 数字不会添加到初始数组中,其中已经有值了?input = 4->那么我们就说吧filled = [1, 1, 1, 1]。
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

const fibonacci = function(input) {

    let n = Number(input);

        if (n === 1) {

            return 1;

        } else if (n < 1) {

            return "OOPS";

        } else if (n > 1) {

            let array = new Array(n);                              // <---- Starting here

            let filled = array.fill(1);

            let reduced = filled.reduce((acc, _, i) => {

                acc.push((i <=1) ? i : acc[i-2] + acc[i-1])

                    return acc;                          

            },[]); // <- reduce is initialized with an array (new array),

return reduced[n - 1] + reduced[n - 2];

        }

由于reduce是用新数组初始化的,因此该函数正在减少(将新值添加到新的初始化数组中)并返回相同的值。

这里的减速器是如何工作的 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce



查看完整回答
反对 回复 2023-10-20
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信