首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Math.max的Javascript Math.max

带Math.max的Javascript Math.max
EN

Stack Overflow用户
提问于 2018-08-22 11:57:25
回答 1查看 494关注 0票数 3

为什么第二个示例返回NaN,而第一个示例工作?

代码语言:javascript
复制
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函数需要一个回调参数。此外,回调需要两个参数,即累积和当前元素(您也可以调用它们的左和右等)。有更多的参数,但它们是可选的。

我曾经尝试过模仿reduce函数,而这个例子就像一个魅力

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 12:00:43

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51966345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档