Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lideming/generator-ext
Array-like methods for generators.
https://github.com/lideming/generator-ext
extension generator javascript
Last synced: 18 days ago
JSON representation
Array-like methods for generators.
- Host: GitHub
- URL: https://github.com/lideming/generator-ext
- Owner: lideming
- License: mit
- Created: 2022-04-22T02:11:28.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2022-04-22T02:25:50.000Z (over 2 years ago)
- Last Synced: 2024-11-08T06:06:19.605Z (2 months ago)
- Topics: extension, generator, javascript
- Language: JavaScript
- Homepage:
- Size: 3.91 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JS Generator Extension
Array-like methods for generators.
[![npm](https://img.shields.io/npm/v/generator-ext?color=blue)](https://www.npmjs.com/package/generator-ext)
## Background
In C# and Python, we can do some operations on an iterator and get chained generators.
Python Example
```python
(x * 10 for x in range(10) if x % 2 == 1)
# got a generator for [10, 30, 50, 70, 90]
```C# Example (click to expand)
```csharp
Enumerable.Range(0, 10)
.Where(x => x % 2 == 1)
.Select(x => x * 10)
// got a iterator for [10, 30, 50, 70, 90]
// using LINQ extension methodsfrom x in Enumerable.Range(0, 10)
where x % 2 == 1
select x * 10
// the same, using LINQ query syntax
```Currently, to do the same thing in JavaScript:
```javascript
new Array(10).fill(0).map((x, i) => i)
.filter(x => x % 2 == 1)
.map(x => x * 10)
```There are a few disadvantages:
- `new Array(n).fill(...).map(...)` is too long and confusing
- 3 intermediate arrays are created (`new Array()`, the first `map()`, `filter()`)## Getting Started
```bash
npm install generator-ext
``````javascript
import { range } from "generator-ext";[...range(10).filter(x => x % 2 == 1).map(x => x * 10)]
```- We have `range()` to get a Python-like range generator
- We can call methods like `map()` on any generator, retuning chained generator
- They are just (chained) generators. We can call `toArray()` on the generator to get the result as array, without any intermediate arrays.
- `[...generator]` also works.## Methods for Generators
These methods are added to the prototype of [GeneratorFunction](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction):
- Array-like methods (`map`, `filter`, `flat`, `flatMap`, `reduce`)
- are identical to Array builtins, excepts they return generators instead of arrays.- `toArray` method
## `range` Generator Function
Generates a number sequences. It's similar to `range` in Python.
```javascript
range(10)
// generator for [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]range(3, 10)
// generator for [3, 4, 5, 6, 7, 8, 9]range(3, 10, 2)
// generator for [3, 5, 7, 9]
```