第一次迭代后,您将返回一个数字,然后尝试获取该数字的属性
x以将其添加到下一个对象中,该对象是
undefined和数学,其中涉及
undefined结果
NaN。
尝试返回一个对象
x,该对象包含一个属性,该属性与参数的x个属性之和:
var arr = [{x:1},{x:2},{x:4}];arr.reduce(function (a, b) { return {x: a.x + b.x}; // returns object with property x})// ES6arr.reduce((a, b) => ({x: a.x + b.x}));// -> {x: 7}从注释中添加了说明:
每次迭代的返回值在下一次迭代中
[].reduce用作
a变量。
迭代1: ,,
a = {x:1} 分配给在迭代2b = {x:2}``{x: 3}``a迭代2:
a = {x:3},b = {x:4}。您的示例的问题在于您要返回数字文字。
function (a, b) { return a.x + b.x; // returns number literal}迭代1: ,,
a = {x:1} 如在下次迭代b = {x:2}``// returns 3``a迭代2:
a = 3,
b = {x:2}回报NaN
许多文字
3不(通常)有一个叫做财产
x所以它
undefined和
undefined + b.x回报
NaN,并
NaN +<anything>始终
NaN
澄清
:我更喜欢我的方法,而不是该线程中的其他最高答案,因为我不同意这样的想法,即传递一个可选参数以使用幻数来减少以得出数字基元会更干净。这可能导致写入的行数减少,但imo可读性却下降。



