用 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
开始)
cur
是 Object,我们从中减少它的 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)
关于如何理解为什么第一个 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
开始)cur
是 Object,我们从中减少它的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)