Javascript уменьшить не работает после функции?

Не совсем уверен, где я ошибся, ожидая факториализации 5 (1*2*3*4*5 = 120), превратив 5 в строку [1,2,3,4,5], а затем используя уменьшение умножить строку все вместе. Когда я запускаю код, он просто дает мне [1,2,3,4,5]...

 var arr = [];

function factorialize(num) {

 for (var i = 1; i <= num; i++) {
  arr.push(i);
}
  return arr;
}

var factors = 0;

factors = arr.reduce(function(previousVal, currentVal) {
  return previousVal * currentVal;
}, 0); // Expecting 120, instead result = [1,2,3,4,5]

factorialize(5);

Простите за долгий путь - моя первая неделя Javascript!

6 ответов

Решение

Ты не звонишь factors, factorialize(5); делая это, вы просто звоните function factorialize(num) который даст вам массив (из 1... Num).

(Дополнительная информация) А также в сокращении вы добавляете + возраст умножения * так что измените это и

factors = arr.reduce(function(previousVal, currentVal) {
  return previousVal + currentVal;
}, 0);
   ^
   |_  either initialize it to 1 or remove this.

Смотрите ниже код. Я просто создаю массив, а затем применяю сокращение к этому массиву.

function factorialize(num) {
 var arr = [];
 for (var i = 1; i <= num; i++) {
  arr.push(i);
 }
 return arr.reduce(function(previousVal, currentVal) {
      return previousVal * currentVal;
  });
}


console.log(factorialize(5));

arr пусто, вы должны сначала дать ему результирующий массив факторизации, и вы должны умножить, а не добавить, а при умножении начальное значение равно 1, а не 0:

var arr = [];

function factorialize(num) {
  for (var i = 1; i <= num; i++) {
    arr.push(i);
  }
  return arr;
}

arr = factorialize(5); // give it the value

var factors = arr.reduce(function(previousVal, currentVal) {
  return previousVal * currentVal; // multiply, don't add
}, 1); // start with 1 when multiplying

console.log(arr);
console.log(factors);

Если вы просто хотите рассчитать факториал:

function factorial(num) {
  var res = 1;
  for (var i = 2; i <= num; i++) {
    res *= i;
  }
  return res;
}
console.log('factorial(5) = ' + factorial(5));
console.log('factorial(10) = ' + factorial(10));

var arr = [];
function factorialize(num) {
    for (var i = 1; i <= num; i++) {
        arr.push(i);
    }
    var factors = 0;
    factors = arr.reduce(function (previousVal, currentVal) {
        return previousVal * currentVal;
    });
    return factors
}

factorialize(5); // 120

Вы можете получить сначала факторы, а затем умножить в Array#reduceфакторы.

Я предлагаю назвать функцию как она делает и переместить объявление массива внутри функции, потому что функция возвращает этот массив.

Для получения продукта необходимо умножить значения и использовать1в качестве нейтрального начального значения для получения продукта из чисел.

function getFactors(num) {
    var i, arr = [];

    for (i = 1; i <= num; i++) {
        arr.push(i);
    }

    return arr;
}

var factors = getFactors(5),
    product = factors.reduce(function(previousVal, currentVal) {
        return previousVal * currentVal;
    }, 1);

console.log(factors);
console.log(product);

Проблема с начальным значением, установленным в 0, и вместо умножения чисел, это добавляется

arr.reduce(обратный вызов, initValue)

обр = [1,2,3,4,5]

В представленном коде он накапливается в следующем формате

arr.reduce(function(previousVal, currentVal) {
  return previousVal + currentVal;
}, 0);

Первый звонок -> 0 + 1 = 1 (факторы = 1)
Второй вызов -> 0 + 2 = 2 (факторы = 2)
Первый звонок -> 0 + 3 = 3 (факторы = 3)
Первый звонок -> 0 + 4 = 4 (факторы = 10)
Первый звонок -> 0 + 5 = 5 (факторы = 15)

Для достижения ожидаемого результата используйте опцию ниже

var arr = []; // initialize array arr

function factorialize(num) {
//for loop to push 1,2 ,3, 4, 5 to arr array
 for (var i = 1; i <= num; i++) {
  arr.push(i);
}
// return arr.reduce value by multiplying all values in array, default initial value is first element 
  return arr.reduce(function(previousVal, currentVal) {
  //console log to debug and display loop values
  console.log(previousVal, currentVal);
  return previousVal * currentVal;
});
}

console.log("output", factorialize(5));

Пример кода - https://codepen.io/nagasai/pen/YaQKZw?editors=1010

  • Поместите глобальную переменную arr внутри функции factorialize,
  • Получить возвращенный массив и затем выполнить функцию reduce,
  • Вам нужно умножить, а не сложить цифры.
  • Начните уменьшение с initialValue = 1, чтобы избежать 0 * n,

function factorialize(num) {
  var arr = [];
  for (var i = 1; i <= num; i++) {
    arr.push(i);
  }
  return arr;
}

var arr = factorialize(5);
var factors = arr.reduce(function(previousVal, currentVal) {
  return previousVal * currentVal;
}, 1);

console.log(factors)

Другие вопросы по тегам