gpt4 book ai didi

Javascript Array.reduce 与 Math.max

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:34 24 4
gpt4 key购买 nike

为什么第二个示例返回 NaN,而第一个示例有效?

const numbers = [ 1, 2, 3 ]

console.log('passing arrow funciton', numbers.reduce((l, r) => Math.max(l, r)) ) // 3

console.log('passing bound function', numbers.reduce(Math.max.bind(Math)) ) // NaN

为了给您一些上下文,reduce 函数需要一个回调参数。此外,回调需要两个参数,即 Accumulation 和 Current 元素(您也可以称它们为 left 和 right 等)。还有更多参数,但它们是可选的。

我试过模拟 reduce 函数,这个例子非常有效

const numbers = [1, 2, 3]

const reduce = (array, func) => {

let largest = 0

array.forEach
(
(number, i, a) =>
a[i + 1]
? largest = func(number, a[i + 1])
: console.log('done')
)

return largest

}

console.log( 'mock reduce', reduce(numbers, Math.max.bind(Math)) ) // 3

enter image description here

最佳答案

.reduce() 的回调被传递给4 参数:累加器、当前元素、索引和整个数组。 NaN 来自将数组本身转换为数字的尝试。

因此,在第一次调用回调时,.max() 将被传递 1, 2, 1, [1, 2, 3]。这将返回 NaN,然后它将一直是 NaN。除了数组中的 NaN 问题外,如果您有一个包含许多小数或负数的长数组,索引值也可能会影响结果的准确性。

请注意,我在这里描述的是 .reduce() 传递给提供的回调函数的参数列表,而不是 .reduce() 本身的参数. .reduce() 函数总是 将所有四个参数传递给回调,但 JavaScript 的本质是函数可以忽略多余的参数。这正是您的第一个示例所做的。

关于Javascript Array.reduce 与 Math.max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51966345/

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