# 2629. Function Composition
###### tags: `leetcode 30 days js challenge` `Easy`
[2629. Function Composition](https://leetcode.com/problems/function-composition/)
### 題目描述
Given an array of functions `[f1, f2, f3, ..., fn]`, return a new function `fn` that is the **function composition** of the array of functions.
The **function composition** of `[f(x), g(x), h(x)]` is `fn(x) = f(g(h(x)))`.
The **function composition** of an empty list of functions is the **identity function** `f(x) = x`.
You may assume each function in the array accepts one integer as input and returns one integer as output.
### 範例
**Example 1:**
```
Input: functions = [x => x + 1, x => x * x, x => 2 * x], x = 4
Output: 65
Explanation:
Evaluating from right to left ...
Starting with x = 4.
2 * (4) = 8
(8) * (8) = 64
(64) + 1 = 65
```
**Example 2:**
```
Input: functions = [x => 10 * x, x => 10 * x, x => 10 * x], x = 1
Output: 1000
Explanation:
Evaluating from right to left ...
10 * (1) = 10
10 * (10) = 100
10 * (100) = 1000
```
**Example 3:**
```
Input: functions = [], x = 42
Output: 42
Explanation:
The composition of zero functions is the identity function
```
**Constraints**:
- `-1000 <= x <= 1000`
- `0 <= functions.length <= 1000`
- `all functions accept and return a single integer`
### 解答
#### TypeScript
```typescript=
function compose(functions: F[]): F {
return (x) => functions.reduceRight((accumulator, currentFn) => currentFn(accumulator), x);
}
```
> [name=Sheep][time=Thur, May 11, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)