Рассмотрим простую рекурсивную функцию, fibs
-
const fibs = (n = 0, a = 0, b = 1) =>
n <= 0
? []
: [ a, ...fibs(n - 1, b, a + b) ]
console.log(fibs(10)) // first 10 fib numbers
// [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ]
Теперь добавьте свой .filter
-
const fibs = (n = 0, a = 0, b = 1) =>
n <= 0
? []
: [ a, ...fibs(n - 1, b, a + b) ]
const evens =
fibs(10)
.filter(n => !(n & 1))
console.log(evens)
// [ 0, 2, 8, 34 ]
Теперь добавьте свой .reduce
-
const fibs = (n = 0, a = 0, b = 1) =>
n <= 0
? []
: [ a, ...fibs(n - 1, b, a + b) ]
const sumEvens =
fibs(10)
.filter(n => !(n & 1))
.reduce((r, n) => r + n, 0)
console.log(sumEvens)
// 44
Чтобы увидеть, как вы можете вычислить Фибоначчи, используя другие методы функционального программирования, см. это недавние вопросы и ответы
Спасибо вам за это. Но я ищу вставку элемента в массив (возможно, в одну функцию), пока не будет выполнено определенное условие (например, создайте массив Фиббоначи, пока последний элемент не станет меньше 100).
Вы измените n = 0
на until = 0
и измените условие выхода вашего l oop с n <= 0
на a > until
-
const fibs = (until = 0, a = 0, b = 1) =>
a > until
? []
: [ a, ...fibs(until, b, a + b) ]
console.log(fibs(100))
// [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ]
const sumEvens =
fibs(100)
.filter(n => !(n & 1))
.reduce((r, n) => r + n, 0)
console.log(sumEvens)
// 4