Найдите ошибки в коде

Вот условие:

введите сюда описание изображения

Вот мое решение, но имеются какие-то ошибки:

    function modify(arr){
 var result = [];
 result = arr.reduce((acc,index,el,mas) => {
     if(el == mas[0])
         return el*acc;
     else
         return acc*acc;
     },1);
 return result;
}

Ответы (2 шт):

Автор решения: Dmitrii Sedov

Чуть исправил.

function myFilter(arr) {
  var result = [];
  arr.reduce((acc, current) => {
    if (current % 2 == 0) return acc;
    var val = acc * current;
    result.push(val); 
    return val;
  }, 1);
  return result;
}

console.log(myFilter([3, 2, 4, 7, 12, 3, 9]))

→ Ссылка
Автор решения: OPTIMUS PRIME

Вот не факт, что reduce лучше подходит для этой задачи) Решение на нем выглядит так:

console.log(modify([3, 3, 9]));
console.log(modify([1, 2, 3, 4, 5]));

function modify(array) {
  return array.filter(e => e % 2).reduce( (arr, el, i) => {
    arr.push( el * (i == 0 ? 1 : arr[i-1]) );
    return arr;
  }, []);
}

Здесь переменная arr получает начальное значение = пустой массив [] и на каждом круге туда добавляется новое число, а return отправляет уже измененный массив на следующую итерацию.

Полезно понимать, что reduce - всего лишь синтаксический сахар, чтобы можно было писать более короткий код. Если его использование должно усложнить понимание кода - иногда правда легче написать пару лишних строчек. Например этот код будет делать ровно то же самое:

console.log(modify([3, 3, 9]));
console.log(modify([1, 2, 3, 4, 5]));

function modify(array) {
  let arr = []; // просто переменные объявлены заранее
  let el = 1;
  for( let i = 0; i < array.length; i++ ){
    if( array[i] % 2 == 0 ) continue;
    
    arr.push( el *= array[i] );
  }
  
  return arr;
}

Или, тот же map:

console.log(modify([3, 3, 9]) );
console.log(modify([1, 2, 3, 4, 5]) );

function modify(array) {
  let acc = 1;
  return array.filter(e => e%2).map( el => acc *= el );
}

→ Ссылка