не могу переписать код

169
08 декабря 2019, 04:20

У меня такой код:

function fold(array, operation, initial) {
    if (arguments.length === 3) {
        array.push(initial);
    }
    return array.length == 1 
    ? array[0] : operation(array[0], fold(array.splice(1), operation));
}
function add(a, b) {
    return a + b;
}
function mul(a, b) {
    return a * b;
}    
console.log(fold([1,2,3],add,10));//16
console.log(fold([1,2,3],mul,10));//60

Нужно переписать через простой for. Я делаю так :

function fold(array, operation, initial) {
    if (array.length === 1) return array[0];
    if (arguments.length === 3) array.push(initial);
    let res = array[0];
    for(let i = 1;i < array.length; i++){
        res += operation(res, array[i]);
    }
    return res;
}
Answer 1

Вы зря добавили +=, res уже передается в функцию, не нужно аккумулировать в таком случает результат

function alterFold(array, operation, initial) { 
  if (array.length === 1) return array[0]; 
  if (arguments.length === 3) array.unshift(initial); 
  let res = array.pop(); 
  while(array.length){ 
    res = operation(res, array.pop()); 
  } 
  return res; 
} 
 
 
function fold(array, operation, initial) { 
    if (arguments.length === 3) { 
      array.push(initial); 
    } 
    return array.length == 1 ? array[0] : operation(array[0], fold(array.splice(1), operation)); 
} 
               
function add(a, b) { 
  return a + b; 
} 
               
function mul(a, b) { 
   return a * b; 
}     
 
console.log('original fold'); 
console.log(fold([1,2,3],add,10)); 
console.log(fold([1,2,3],mul,10)); 
console.log('alter fold'); 
console.log(alterFold([1,2,3],add,10)); 
console.log(alterFold([1,2,3],mul,10)); 
console.log('Grundy`s suggestion'); 
console.log(fold([1,2,3], (a,b)=>a/b,10))  
console.log(alterFold([1,2,3], (a,b)=>a/b,10))

READ ALSO
Запрос на исправление ошибки в тексте

Запрос на исправление ошибки в тексте

Требуется найти готовый сервисРеализация может быть как для Angular (TypeScript), так и обычный JS модуль

183
Как использовать JS библиотеки без NodeJS

Как использовать JS библиотеки без NodeJS

В настоящее время, куда не глянь, любая полезная библиотека подключается к проекту npm install

197
Проверить на наличие li в ul

Проверить на наличие li в ul

Я пытаюсь сделать таймер на JS, и сейчас я пытаюсь сделать добавление таймераЯ хочу сделать, чтобы перед добавлением элемента, шла проверка...

167