Привет, вот какой-то код из w3-школ, использующих метод уменьшения массива. Я пытаюсь научиться использовать это, однако я немного запутался в том, почему этот код работает. Причина в том, что numbers.reduce(getSum)
doesent принимает параметры в функции getSum. Как наш код даже знает, сколько вещей внутри массива и как их суммировать, если мы даже не даем параметры функции getSum. В w3schools говорится: array.reduce(function(total,currentValue,currentIndex,arr),initialValue)
, а также говорит, что требуются total и currentValue. Но у нас их даже нет? у нас просто есть наша функция! Помогите пожалуйста.reduce метод для массивов
<!DOCTYPE html>
<html>
<body>
<p>Click the button to get the sum of the 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 = [65, 44, 12, 4];
function getSum(total, num) {
return total + num;
}
function myFunction(item) {
document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
</script>
</body>
</html>
Heres другой пример .. не уверен, что разница
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);
}
Разница в начальной величины: 'undefined' vs' 0'. с элементом 'undefined' first array будет использоваться вначале. Кроме того, второй округляет все числа до целых чисел. –
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce может объяснить это немного лучше, но в основном его можно записать как 'numbers.reduce (function (total, num) {return total + num;}); 'если' getSum' были заменены анонимной функцией. Остальное может быть лучше объяснено ссылкой. –