收藏
回答

Array.reduce函数的callBack函数执行行为很奇怪?

给出一段代码,不知道大家有没有碰到过这样的问题:

let aaa = [1,2,3,4];
aaa.reduce(
(sum,item)=>{ console.log(sum,item); return sum;}
);

上面这段代码的执行没有问题。结果:

0 1
1 2
3 3
6 4

然后,有趣的来了:

把代码改成这样:

let aaa = [1];
aaa.reduce(
(sum,item)=>{ console.log(sum,item);return sum;}
);

你是不是以为会运行一次,至少输出:

0 1

这样?不是的,,结果是什么输出都没有。。。

然后,你再把sum的初始值设置一下:

let aaa = [1];
aaa.reduce(
(sum,item)=>{ console.log(sum,item);return sum;},
0
);

打印又出现了:

0 1

这个坑我调了好久才发现。。不知道大家有没有遇到过一样的情况。目前我还没有试过是JS本身的问题,还是小程序的JS内核解释器的bug。

最后一次编辑于  2020-05-25
回答关注问题邀请回答
收藏

1 个回答

  • LeeJim🌀
    LeeJim🌀
    2020-05-25

    遇到问题的时候先仔细看下文档,建议看MDN,里面说到了初始值的特殊情况:

    如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

    2020-05-25
    有用 2
    回复 1
    • 张翼.Tophy
      张翼.Tophy
      2020-05-25
      果然在MDN上有说明这个情况,受教了
      2020-05-25
      回复
登录 后发表内容
问题标签