Muranx
@Muranx
кто понял this тот в цирке не смеётся

Почему не работает метод forEach( )?

var bisOne = [1,2,3,4,5].forEach(function(e,i,arr){return arr[i]=e*10}); 
var ghost = [1,2,3,4,5]
var bisTwo = ghost.forEach(function(e,i,arr){return arr[i]=e*10}) 

console.log(bisOne);  //(1)
console.log(ghost);
console.log(bisTwo);  //(2)

var gsp=[1,2,3,4,5].reduce(function(a,b){return a+b}) 
console.log(gsp);  //(3)

Не могу понять, почему вызовы ( 1 ) и ( 2 ) помеченные в коде комментариями - возвращают undefined? Ведь если посмотреть на вызов метода reduce в вызове под цифрой ( 3 ) , конструкция похожая , НО рабочая в отличии от первых двух! По сути же, мы записываем в bisOne и bisTwo ! Объясните пожалуйста, почему, и как это НЕ работает!
  • Вопрос задан
  • 933 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что, внезапно, forEach - это не то же самое, что reduce. Метод forEach используется исключительно для итерирования, а reduce для получения какого-то результата, поэтому forEach ничего не возвращает.

Вам нужен метод map:
var bisOne = [1,2,3,4,5].map(function(e){return e*10});


Если очень хочется сделать это при помощи forEach, то должно быть так:
var bisOne = [1,2,3,4,5];
bisOne.forEach(function(e,i,arr){arr[i]=e*10});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы