Add unfold
Similar to Ramda's unfold
This commit is contained in:
20
snippets/unfold.md
Normal file
20
snippets/unfold.md
Normal file
@ -0,0 +1,20 @@
|
||||
### unfold
|
||||
|
||||
Builds an array, using an iterator function and an initial seed value.
|
||||
|
||||
Use a `while` loop and `Array.push()` to call the function repeatedly until it returns `false`.
|
||||
The iterator function accepts one argument (`seed`) and must always return an array with two elements ([`value`, `nextSeed`]) or `false` to terminate.
|
||||
|
||||
```js
|
||||
const unfold = (fn, seed) => {
|
||||
let result = [],
|
||||
val = [null, seed];
|
||||
while ((val = fn(val[1]))) result.push(val[0]);
|
||||
return result;
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
var f = n => (n > 50 ? false : [-n, n + 10]);
|
||||
unfold(f, 10); // [-10, -20, -30, -40, -50]
|
||||
```
|
||||
Reference in New Issue
Block a user