我正在研究一个功能强大的javascript库,并发现了一种采用线性数组平均数的单线。我对语法中包含的某些内容感到困惑,但似乎不需要正确返回结果。
const numArr = [1,2,3,4,5,6,7,8,9,10];
const average = (array) => array.reduce((a, b) => (a + b), 0) / array.length;
Result => 5.5
看似可选的部分是“,/”之前的“,0”。
任何输入将不胜感激。
答案 0 :(得分:1)
JavaScript array.reduce
方法有2个参数,第一个是回调函数,第二个是initialValue,如果我们需要传递其他值,它将作为第一个初始值传递给回调函数,它是{{1} }。如果未定义,则将第一个元素用作初始值。
有关更多信息,请查看此Javascript array reduce
答案 1 :(得分:0)
这里0
是初始值,或者有时也称为驴累加器。因此,在reduce回调函数中,a
参数的初始值将设置为5
。在此演示中,传递{5而不是0
并检查第一个日志。它将打印5
。因此,无论您通过什么,都将使用a
的初始值。第二个日志将是initial value
+ first element in the array
,即5+1=6
。现在初始值将更改为6,第三个日志将为6+2=8
,依此类推
const numArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const average = (array) => array.reduce((a, b) => {
console.log(a)
return (a + b);
}, 5) / array.length;
console.log(average(numArr))
答案 2 :(得分:0)
所示的average
函数可以分为两部分,其中只有第一部分与回答问题有关。
第一部分创建数组内所有数字的总和:
array.reduce((a, b) => (a + b), 0)
实际上,这里不需要结尾, 0)
部分,因为reduce
都在等待起始值(此处为0
)或它开始数组中的第一个元素作为种子值。我个人认为,添加, 0)
部分可以使缩进的含义更加清楚:将所有从零开始的数字相加。
通过查看该行,在reducer函数内部有一个不必要的分组运算符。因此,可以这样重写:
array.reduce((a, b) => a + b, 0)
或者,如果您具有add
函数(例如const add = (a, b) => a + b
):
array.reduce(add, 0)
没有种子值,我们得出最短形式:
array.reduce(add)
答案 3 :(得分:0)
为此,我们首先了解reducer函数:
Arr.reduce((accumulator, currentValue) => (/* do something with the parameters */), initialValue);
这里:
累加器:累加器累积回调的返回值
currentValue :数组中正在处理的当前元素。
initialValue :用作首次调用回调的第一个参数的值。
第一次调用回调时,accumulator
和currentValue
可以是两个值之一。如果在对initialValue
的调用中提供了reduce()
,则累加器将等于initialValue
,并且currentValue
将等于数组中的第一个值。如果没有提供initialValue
,则accumulator
将等于数组中的第一个值,而currentValue
将等于第二个值。
答案 4 :(得分:0)
According to Mozilla's documentation,第二个参数是初始值:
arr.reduce(callback[, initialValue])
要回答您的问题:为什么要这样做?
需要考虑零长度数组,并避免出现异常。如果省略第二个参数,则如果数组中的元素为零,则会出现异常,如下所示:
const numArr = [];
const average = (array) => array.reduce((a, b) => (a + b)) / array.length;
console.log(average(numArr));
另一方面,如果您添加初始值:
const numArr = [];
const average = (array) => array.reduce((a, b) => (a + b), 0) / array.length;
console.log(average(numArr));
在这种情况下,您有一个NaN
,因为最后会有0 / 0
,这会在JavaScript中产生NaN
。但是至少您没有任何例外:)。