У меня такой код:
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;
}
Вы зря добавили +=, 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))
Продвижение своими сайтами как стратегия роста и независимости