请教一个 reduce 方法的问题
資深大佬 : teslayun 2
在查阅 MDN 文档的时候看到这个例子:
如果数组为空且没有提供 initialValue,会抛出 TypeError 。如果数组仅有一个元素(无论位置如何)并且没有提供 initialValue, 或者有提供 initialValue 但是数组为空,那么此唯一值将被返回并且 callback 不会被执行。
提供初始值通常更安全,正如下面的例子,如果没有提供 initialValue,则可能有四种输出:
var maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x ); var maxCallback2 = ( max, cur ) => Math.max( max, cur ); // reduce() 没有初始值 [ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback ); // NaN [ { x: 2 }, { x: 22 } ].reduce( maxCallback ); // 22 [ { x: 2 } ].reduce( maxCallback ); // { x: 2 } [ ].reduce( maxCallback ); // TypeError // map/reduce; 这是更好的方案,即使传入空数组或更大数组也可正常执行 [ { x: 22 }, { x: 42 } ].map( el => el.x ) .reduce( maxCallback2, -Infinity );
这里面第一个数组的 reduce 为啥会返回 NaN 呢,求大佬解惑。 地址: https://developer.mozilla.org/zh-cn/docs/web/javascript/reference/global_objects/array/reduce
大佬有話說 (10)