Обратный вызов в моем коде, кажется, не работает и возвращает результат без применения функции обратного вызова - PullRequest
0 голосов
/ 30 января 2019

Я написал объект javascript 'myMath' следующим образом: Но в функции 'mean' обратный вызов не вызывается.

const myMath = {
    square(x){
         return x**2;
    },
    mean(array, callback){
            if(callback){
                    array.map(callback);
            }
            const total = array.reduce((acc,x)=>acc+x);
            return total/array.length;
    }
};

При попытке вызвать функцию следующим образом, получается 2, а не 4,6666 ..., что ожидается.

myMath.mean([1,2,3],x=>x**2);
<< 2

Почему это так?И как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

.map возвращает новый массив.Это тот, с которым вам нужно работать после операции с картой.

const myMath = {
    square(x){
         return x**2;
    },
    mean(array, callback){
       let mapped = callback ? array.map(callback) : array;
       const total = mapped.reduce((acc,x)=>acc+x);
       return total/mapped.length;
    }
};

console.log(myMath.mean([1,2,3],x=>x**2));
console.log(myMath.mean([1,2,3]));
0 голосов
/ 30 января 2019

Array.map не является "мутирующим" методом, поэтому вы должны сохранить сопоставленное значение:

array = array.map(callback);

...