gpt4 book ai didi

JavaScript reduce 不能处理数学函数?

转载 作者:IT老高 更新时间:2023-10-28 23:09:23 25 4
gpt4 key购买 nike

我正在尝试一项显而易见的任务:

var maxVal = [ 1, 2, 3, 4, 5 ].reduce( Math.max, 0 );

然后得到:

NaN

结果。为了使它工作,我必须以这种方式创建一个匿名函数:

var maxVal = [ 1, 2, 3, 4, 5 ].reduce( function ( a, b ) { 
return Math.max(a, b);
}, 0 );

谁能告诉我为什么?两者都是接受两个参数并且都返回一个值的函数。有什么区别?

另一个例子可能是这样的:

var newList = [[1, 2, 3], [4, 5, 6]].reduce( Array.concat, [] );

结果是:

[1, 2, 3, 0, #1=[1, 2, 3], #2=[4, 5, 6], 4, 5, 6, 1, #1#, #2#]

我只能在这个形状下在 node.js 中运行这个示例(我现在使用的 node.js v4.12 中的数组没有 concat):

var newList = [[1, 2, 3], [4, 5, 6]].reduce( [].concat, [] );    

然后得到这个:

[ {}, {}, 1, 2, 3, 0, [ 1, 2, 3 ], [ 4, 5, 6 ], 4, 5, 6, 1, [ 1, 2, 3 ], [ 4, 5, 6 ] ]

为什么会这样?

最佳答案

传递给reduce的函数takes more than 2 arguments :

  • previousValue
  • 当前值
  • 索引
  • 数组

Math.max 将评估 所有 参数并返回最高值:

Math.max(1, 2, 3, 4) === 4;

因此,如果将 Math.max 传递给 reduce,它将返回所传递的 4 个参数中的最大值,其中一个是数组。传递数组将使 Math.max 返回 NaN,因为数组不是数字。这是规范(15.8.2.11):

Given zero or more arguments, calls ToNumber on each of the arguments and returns the largest of the resulting values.

...

If any value is NaN, the result is NaN

ToNumber 将为数组返回 NaN

所以使用 Math.max 进行归约最终会返回 NaN

关于JavaScript reduce 不能处理数学函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com