0作为减少功能的initalValue的作用是什么?

时间:2019-01-27 13:18:35

标签: javascript reduce

要学习reduce功能,我已经对此w3schools example做过实验

<!DOCTYPE html>
<html>
<body>

<p>Click the button to get the sum of the rounded numbers in the array.</p>
<button onclick="myFunction()">Try it</button>

<p>Sum of numbers in array: <span id="demo"></span></p>

<script>
var numbers = [15.5, 2.3, 1.1, 4.7];

function getSum(total, num) {
  return total + Math.round(num);
}
function myFunction(item) {
  document.getElementById("demo").innerHTML = numbers.reduce(getSum, 0);
}
</script>

</body>
</html>

在此示例中,如果我们为initalValue传递0,则返回24,但如果使用其默认值initalValue,则结果为23.5! 所以我无法得到零点以及为什么它会改变结果! initialValue是否已经等于0?

4 个答案:

答案 0 :(得分:0)

accumulator的初始值是array中的第一个元素,它从第二个元素开始直到明确地给accumulator赋值(在这种情况下为0)。当没有给出值时,accumulator开始时已经是15.5,但是当您给它赋予值0时,它从那里开始,因此结果有所不同。

  

第一次调用回调时,累加器和currentValue   可以是两个值之一。如果在的调用中提供了initialValue   reduce(),则累加器将等于initialValue,并且   currentValue将等于数组中的第一个值。如果不   提供initialValue,那么累加器将等于第一个   数组中的值,并且currentValue将等于第二个。

     

注意:如果未提供initialValue,则reduce()将执行   从索引1开始的回调函数,跳过第一个索引。如果   提供了initialValue,它将从索引0开始。

引用MDN

答案 1 :(得分:0)

  

如果未提供初始值,则数组中的第一个元素将   使用。在没有初始值的空数组上调用reduce()   是一个错误。

因此,如果您不使用0,则将15.5作为初始值

您可以在此处阅读更多信息-> Reduce Parameters

例如,如果看到的话,您可以看到此代码,因为开始时我们有0.1,所以它将作为初始值。

let arr = [0.1,15.5, 2.3, 1.1, 4.7]

let output = arr.reduce((op, cur) => op+=Math.round(cur) )

console.log(output)

答案 2 :(得分:0)

如果初始值为0,则getSum返回的所有和均为整数,第一次计算为0 + Math.round(15.5)=16。另外,由于使用Math.round加法,它们都是整数。这就是为什么最终结果是整数(24)的原因。 如果未提供初始值,则由getSum计算的第一个和为15.5 + Math.round(2.3)= 17.5。进一步的计算都是使用第一个而非四舍五入的求和完成的,该求和不是整数,但小数部分为0.5。因此,最终结果不是整数。 可能有助于放置

console.log("add "+total+"  +  "+num+" => "+Math.round(num)+"  =  "+(total + Math.round(num)));

作为getSum函数的第一行,并查看控制台输出(在Firefox上为F12)。

答案 3 :(得分:0)

initialValue(可选)-用作首次调用回调的第一个参数的值。 1.如果未提供初始值,则将使用数组中的第一个元素。 2.在没有初始值的空数组上调用reduce()是错误的。 (请参阅mdn)

根据第一个语句,如果不使用初始值,则将使用第一个元素,因此在此数组[15.5,2.3,1.1,4.7]中,将第一个元素用作初始值,因为math.round()是不适用于初始值(15.5)。

A。因此,对于0,减少功能的输入为-0 + 16 + 2 + 1 +5 = 24 B.没有0的输入是-15.5 + 2 +1 + 5 = 23.5

因此,解释第一和第二条语句时,如果要对输入进行某些操作(例如Math等),则必须提供所需的初始值(在上述情况下为0)。