Artem

Posted on

# Intro to Functional JavaScript

Do you know that out of the box JavaScript has some amazing parts, making it suitable for Functional Programming?

## Folding, Reduction, and Filtering

Let's say we have ten bank accounts.

let accounts = [
{ id: 0, balance: 122.01 },
{ id: 1, balance: 15.111 },
{ id: 2, balance: 7703.5 },
{ id: 3, balance: 9333.2 },
{ id: 4, balance: 1472.111 },
{ id: 5, balance: 993.5 },
{ id: 6, balance: 0.222 },
{ id: 7, balance: 1599.111 },
{ id: 8, balance: 779.5 },
{ id: 9, balance: 93.2 }
];

To warm-up, let's find the total balance. We can do it by folding account balances using addition operator, and initial value of 0. In JavaScript it can be accomplished using reduce().

let totalBalance = accounts.reduce(
(sum, account) => sum + account.balance,
0
);

Now, what if we need to get all the accounts with the balance of 700.00 or higher? It is done using filter().

let filteredAccounts = accounts.filter(
(account) => account.balance > 700
);

What if we only need to work with account ids? Function map() is really helpful for this case!

let ids = accounts.map((account) => account.id);

We can also chain these functions, and manipulate collections in short, and elegant way.

accounts
.map((account) => account.balance)
.filter((balance) => balance < 100)
.reduce((sum, balance) => sum + balance, 0);

Amazing, is not it? Now, let's see some more!

## ES6 Destructuring Operator

We have an array of ten numbers.

let numbers = [0,1,2,3,4,5,6,7,8,9];

This is how we can iterate, and print them using the Tail recursion.

function printArray(array) {
if(array.length > 0) {
printArray(tail);
}
}

Using the destructuring operator, we can also create variadic functions, similar to ones in LISP.