Вместо того, чтобы делать это рекурсивно, я взял решение от @Amin Jafari, в котором используется reduce()
. Эта функция быстрее, чем рекурсивное решение.
Сначала мы генерируем массив. Мы делаем это, используя Array(n + 1)
. n
- это факториал, поэтому, например. для 6!
наш n
будет 6
. Мы получаем индексы с помощью keys()
, но Array()
сам по себе возвращает только действительно пустой массив, а keys()
возвращает только итератор. Поэтому мы распространяем его и помещаем результат в новый массив. Таким образом, мы имеем, например. [0,1,2,3,4,5,6]
(для n + 1
с n = 6
). Мы исключаем 0 с slice(1)
.
После этого мы, наконец, применяем reduce
. Уменьшить итерации по всем элементам, применяет функцию, отслеживая аккумулятор. Нашим аккумулятором здесь является текущий продукт. Итак, что происходит, так это то, что 1 * 2
вычисляется, а результат сохраняется в a
, нашем аккумуляторе. Затем мы умножаем a
на следующее значение, то есть 2 * 2*
, и так происходит до тех пор, пока мы не пройдем весь наш самостоятельно сгенерированный массив.
Эту функцию, основанную на reduce
, мы затем можем использовать для преобразования каждого значения в нашем исходном массиве с map()
.
const factorial = n => [...Array(n+1).keys()].slice(1).reduce((a,c) => a * c),
data = [2, 4, 5];
let res = data.map(v => factorial(v));
console.log(res);
person
claasic
schedule
12.08.2019
nums
должен быть массивом или числом? - person maazadeeb   schedule 12.08.2019