Jo *_*ina 5 javascript arrays reduce
我有一系列的对象,让我们说[{x:2, y:3}, {x:5, y:4}],我打电话reduce((c, n) => c.y + n.y);给它.它显然会回归7.
但是,如果数组包含单个对象,假设[{x:2, y:4}]相同的reduce调用将返回对象本身{x:2, y:4}.
这是正常的行为吗?我是否有义务检查结果是否是对象而不是之后的数字?
Ber*_*rgi 14
是的,这是reduce当你没有为累加器传递一个初始值时的正常行为(你总是应该这样做).除了具有两个对象的数组之外,您的代码在任何数组上都无法正常工作.
去做
arr.reduce((acc, el) => acc + el.y, 0)
Run Code Online (Sandbox Code Playgroud)
当您不提供初始值(的第二个参数reduce)时,这是预期行为。来自MDN:
如果数组为空并且没有
initialValue提供,TypeError将被抛出。如果数组只有一个元素(无论位置如何)并且没有initialValue提供,或者如果initialValue提供但数组为空,则将在不调用callback.
它带有以下建议:
提供初始值通常更安全,因为没有
initialValue.
所以写:
reduce((c, n) => c.y + n.y, { y: 0 });
Run Code Online (Sandbox Code Playgroud)