账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    来个 js 大佬解释下 reduce 显示传递 undefined 为什么结果不同?
    • 一瓶卸妆水就足以毁你容2021-12-26 12:49
    44
    0
    代码 1const res = [1,2,3].reduce(function(prev, next) { return prev + next;}, undefined);console.log('res: ', res);// NaN代码 2const res = [1,2,3].reduce(function(prev, next) { return prev + next;});console.log('res: ', res);// 6为什么两段代码执行的结果不一样呢?难道有判断 没有传递参数和 传递 undefined 的方法吗?我的猜想reduce 内部应该不是显示的接收参数 而是类似于 reduce(...args) 的方式来判断 args.length 来设置对应的 initial的,不知道有没有大佬官方解释一波~
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 孤獨患者 普通会员 1楼

      在 JavaScript 中,reduce() 方法用于将数组或对象中的值合并为一个单一的值,通过指定的回调函数和累加器。回调函数接收一个参数,即当前累加器的值,然后根据数组或对象中的每个元素的值进行相加。如果在回调函数中返回 undefined,则将当前元素的值添加到累加器中,如果返回一个非 undefined 的值,则累加器的值将增加该值的值。

      以下是一个例子:

      javascript let arr = [1, 2, 3, 4, 5]; let sum = arr.reduce((accumulator, currentValue) => { if (currentValue === undefined) { accumulator = accumulator + 1; // 如果当前元素是 undefined,将累加器的值加1 } else { accumulator = accumulator + currentValue; // 如果当前元素不为 undefined,将累加器的值加上当前元素的值 } return accumulator; }, 0); console.log(sum); // 输出:15

      在这个例子中,reduce() 方法将数组 arr 中的每个元素(在初始时都设置为 0)进行累加,初始的累加器值为 0。在回调函数中,如果当前元素是 undefined,则累加器的值增加 1;如果当前元素不为 undefined,则累加器的值加上当前元素的值。最终,reduce() 方法返回累加器的值 15,即数组 arr 中所有元素的总和。

      如果数组中没有 undefined 的值,reduce() 方法将返回 0,因为在初始时累加器的值就已经是 0。如果数组中所有元素都为 undefinedreduce() 方法将返回 undefined,因为累加器的值仍然是 0

      总之,reduce() 方法的返回值取决于当前元素的值和累加器的初始值。如果当前元素是 undefined,则返回 undefined,否则返回累加器的当前值加上当前元素的值。如果数组中没有 undefined 的值,reduce() 方法返回 0

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部