Add 2 new generator snippets

This commit is contained in:
Chalarangelo
2022-01-20 19:31:40 +02:00
parent b89bfa0de5
commit 5adaf7ba4e
2 changed files with 56 additions and 0 deletions

28
snippets/generateUntil.md Normal file
View File

@ -0,0 +1,28 @@
---
title: generateUntil
tags: function,generator,advanced
firstSeen: 2022-01-21T05:00:00-04:00
---
Creates a generator, that keeps producing new values until the given condition is met.
- Initialize the current `val` using the `seed` value.
- Use a `while` loop to iterate while the `condition` function called with the current `val` returns `false`.
- Use `yield` to return the current `val` and optionally receive a new seed value, `nextSeed`.
- Use the `next` function to calculate the next value from the current `val` and the `nextSeed`.
```js
const generateUntil = function* (seed, condition, next) {
let val = seed;
let nextSeed = null;
while (!condition(val)) {
nextSeed = yield val;
val = next(val, nextSeed);
}
return val;
};
```
```js
[...generateUntil(1, v => v > 5, v => ++v)]; // [1, 2, 3, 4, 5]
```

28
snippets/generateWhile.md Normal file
View File

@ -0,0 +1,28 @@
---
title: generateWhile
tags: function,generator,advanced
firstSeen: 2022-01-21T05:00:00-04:00
---
Creates a generator, that keeps producing new values as long as the given condition is met.
- Initialize the current `val` using the `seed` value.
- Use a `while` loop to iterate while the `condition` function called with the current `val` returns `true`.
- Use `yield` to return the current `val` and optionally receive a new seed value, `nextSeed`.
- Use the `next` function to calculate the next value from the current `val` and the `nextSeed`.
```js
const generateWhile = function* (seed, condition, next) {
let val = seed;
let nextSeed = null;
while (condition(val)) {
nextSeed = yield val;
val = next(val, nextSeed);
}
return val;
};
```
```js
[...generateWhile(1, v => v <= 5, v => ++v)]; // [1, 2, 3, 4, 5]
```