用 JavaScript 减少 [ { x: 2 }, { x: 22 }, { x: 42 } ]

reduce [ { x: 2 }, { x: 22 }, { x: 42 } ] with JavaScript

关于如何理解为什么第一个 reduce 调用结果为 NaN 而第二个 reduce 调用结果为 22 的任何建议?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

let maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );


// reduce without initialValue
[ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback ); // NaN
[ { x: 2 }, { x: 22 }            ].reduce( maxCallback ); // 22

reduce 函数应该 return 一个与数组中的格式相同的对象:

let maxCallback = ( acc, cur ) => ({ x: Math.max( acc.x, cur.x )});

需要 initialValue 才能将初始 return 应用于某个值。

  • acc 是我们的 整数 (从 0 开始)
  • curObject,我们从中减少它的 x 属性 值
  • 因此使用第二个initialValue参数.reduce( maxCallback, 0 )
  • acc = Math.max( acc, cur.x )
  • 一样分配
  • 隐式return, acc)

let maxCallback = ( acc, cur ) => (acc = Math.max( acc, cur.x ), acc);

// reduce with initialValue
const a = [ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback, Number.MIN_SAFE_INTEGER ); // 42
const b = [ { x: 2 }, { x: 22 }            ].reduce( maxCallback, Number.MIN_SAFE_INTEGER ); // 22

console.log(a, b)


initialValue是可选的并且很有用——但是当你不减少两个不同的类型 喜欢对象到数字 - 但 数字到数字 喜欢:

let maxCallback = ( acc, cur ) => (acc = Math.max( acc, cur ), acc);

// reduce without initialValue
const a = [ 2, 22, 42 ].reduce( maxCallback ); // 42
const b = [ 2, 22     ].reduce( maxCallback ); // 22

console.log(a, b)