В Javascript объекты (как правило) имеют внутренний прототип. Любое свойство или метод, доступные в свойстве, также доступны для объекта. Например, у массивов есть метод .join
на прототипе: Array.prototype.join
. Таким образом, вы можете вызвать .join
для любого массива, например,
myArray.join('')
, несмотря на тот факт, что join
на самом деле не является свойством массива - это свойство внутреннего прототипа myArray
.
Точно так же, помещая функцию в прототип, эта функция может быть вызвана любым экземпляром.
Когда внутри метода прототипа, this
ссылается на объект, для которого был вызван метод,Так, например, с
myArray.join('')
, когда вызывается .join
, this
внутри него относится к myArray
.
В решении код
var sum = this.reduce(function(prev, cur) { return prev + cur; });
вычисляет сумму массива, к которому был вызван метод. Так как метод включен Array.prototype
, любой массив будет иметь доступ к этому методу.
Проблема с вашим кодом:
var arr = [1, 2, 3, 4, 5];
function average(arrayName) {
const accPlusCur = (acc,cur) {return acc + cur}, 0;
const sumOfAll = arrayName.reduce(accPlusCur);
return sumOfAll / arrayName.length;
};
const avg = average();
console.log(avg);
в том, что average
принимает параметр (массив, из которого вы хотите получить среднее значение), но вы не передаете его.
Кроме того, начальное значение для аккумулятора должно быть параметром second , который выперейти к .reduce
:
var arr = [1, 2, 3, 4, 5];
function average(arrayName) {
const accPlusCur = (acc,cur) => acc + cur;
const sumOfAll = arrayName.reduce(accPlusCur, 0);
return sumOfAll / arrayName.length;
}
const avg = average(arr);
console.log(avg);