JavaScript reduce对象数组返回对象

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)

  • 几乎没有任何明显的区别,使用您认为更容易理解的内容。你不需要`map`,你总是可以将映射集成到你的reducer函数中。 (2认同)

tri*_*cot 5

当您不提供初始值(的第二个参数reduce)时,这是预期行为。来自MDN

如果数组为空并且没有initialValue提供,TypeError将被抛出。如果数组只有一个元素(无论位置如何)并且没有initialValue提供,或者如果initialValue提供但数组为空,则将在不调用 callback.

它带有以下建议:

提供初始值通常更安全,因为没有initialValue.

所以写:

reduce((c, n) => c.y + n.y, { y: 0 });
Run Code Online (Sandbox Code Playgroud)