Найдите ошибки в коде
Вот условие:
Вот мое решение, но имеются какие-то ошибки:
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 );
}
