-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
55e33cb
commit fdc58e6
Showing
12 changed files
with
792 additions
and
185 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,4 @@ node_modules | |
.env | ||
dist | ||
.idea/ | ||
docs/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,146 +1,48 @@ | ||
# Iter8or | ||
|
||
`Iter8or` — это универсальный класс, который предоставляет различные методы для работы с итераторами, как синхронными, так и асинхронными. Этот класс позволяет выполнять такие операции, как фильтрация, маппинг, объединение, сворачивание и другие, используя различные итераторы. | ||
Iter8or — это универсальная библиотека для работы с итераторами и асинхронными итераторами в JavaScript. Она предоставляет мощные методы для обработки, фильтрации, объединения и преобразования данных. | ||
|
||
## Конструктор | ||
``` | ||
constructor(iterable, options = {}) | ||
``` | ||
- `iterable`: **_Итерабельный_ объект**, который будет использоваться в качестве исходного набора данных. | ||
- `options`: **Объект** с дополнительными опциями. | ||
- `digits`: **boolean** (_по умолчанию **false**_) — если true, создается итератор по цифрам числа. | ||
- `async`: **boolean** (_по умолчанию **false**_) — если true, создается асинхронный итератор. | ||
|
||
### Исключения: | ||
- Генерируется **TypeError**, если iterable — это null, undefined, boolean или function. | ||
|
||
## Методы | ||
|
||
- `map(fn)` | ||
Применяет функцию _**fn**_ ко всем элементам итератора и возвращает новый _Iter8or_. | ||
- `fn`: Функция, применяемая к каждому элементу итератора. | ||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const mapped = iter.map(x => x * 2); | ||
console.log([...mapped]); // [2, 4, 6] | ||
``` | ||
|
||
- `filter(predicate)` | ||
Фильтрует элементы итератора на основе предиката и возвращает новый Iter8or. | ||
- `predicate`: Функция, возвращающая true для элементов, которые нужно оставить, и false для тех, которые нужно отфильтровать. | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3, 4]); | ||
const filtered = iter.filter(x => x % 2 === 0); | ||
console.log([...filtered]); // [2, 4] | ||
``` | ||
|
||
- `drop(n)` | ||
Пропускает первые **n** элементов итератора и возвращает новый **Iter8or**. | ||
- `n`: Число элементов, которые нужно пропустить. | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3, 4]); | ||
const dropped = iter.drop(2); | ||
console.log([...dropped]); // [3, 4] | ||
``` | ||
|
||
- `flatMap(fn)` | ||
Применяет функцию **fn** к каждому элементу и разворачивает результирующие итераторы, возвращая новый **Iter8or**. | ||
- `fn`: Функция, которая возвращает итератор для каждого элемента. | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const flatMapped = iter.flatMap(x => [x, x * 2]); | ||
console.log([...flatMapped]); // [1, 2, 2, 4, 3, 6] | ||
``` | ||
|
||
- `flat(depth)` | ||
Разворачивает вложенные итераторы до указанной глубины и возвращает новый **Iter8or**. | ||
- `depth`: Глубина разворачивания (по умолчанию 1). | ||
|
||
```javascript | ||
const iter = new Iter8or([1, [2, [3, 4]]]); | ||
const flattened = iter.flat(2); | ||
console.log([...flattened]); // [1, 2, 3, 4] | ||
``` | ||
## Особенности | ||
|
||
- `reverse()` | ||
Возвращает новый **Iter8or** с элементами в обратном порядке. | ||
- Поддержка работы с итераторами и асинхронными итераторами. | ||
- Встроенные методы для фильтрации, маппинга, объединения, сворачивания и других операций с данными. | ||
- Умение создавать итераторы из неитерируемых объектов: | ||
- Если передан `number`, по умолчанию создается итератор, который проходит от 1 до указанного числа включительно. | ||
- Если опция `digits` установлена в `true`, создается итератор, который разбивает число на отдельные разряды. | ||
- Если передан объект, создается итератор, который проходит по ключам и значениям объекта. | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const reversed = iter.reverse(); | ||
console.log([...reversed]); // [3, 2, 1] | ||
``` | ||
## Installation | ||
|
||
- `take(n)` | ||
Возвращает новый **Iter8or** с первыми **n** элементами итератора. | ||
- `n`: Число элементов, которые нужно взять. | ||
Установите библиотеку с помощью npm: | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3, 4]); | ||
const taken = iter.take(2); | ||
console.log([...taken]); // [1, 2] | ||
```bash | ||
npm install iter8or | ||
``` | ||
|
||
- `concat(...iterators)` | ||
Объединяет несколько итераторов и возвращает новый **Iter8or**. | ||
- `...iterators`: Один или несколько объектов типа Iter8or, которые нужно объединить. | ||
|
||
### Пример использования | ||
```javascript | ||
const iter1 = new Iter8or([1, 2]); | ||
const iter2 = new Iter8or([3, 4]); | ||
const concatenated = iter1.concat(iter2); | ||
console.log([...concatenated]); // [1, 2, 3, 4] | ||
``` | ||
|
||
- `avg(fn)` | ||
Возвращает среднее значение элементов итератора, с возможностью применения функции fn к каждому элементу. | ||
- `fn`: Функция, применяемая к каждому элементу перед вычислением среднего значения (необязательно). | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const average = iter.avg(); | ||
console.log(average); // 2 | ||
``` | ||
|
||
- `max(fn)` | ||
Возвращает максимальное значение элементов итератора, с возможностью применения функции fn к каждому элементу. | ||
- `fn`: Функция, применяемая к каждому элементу перед вычислением максимального значения (необязательно). | ||
import Iter8or from 'iter8or'; | ||
|
||
```javascript | ||
// Пример работы с массивом | ||
const iter = new Iter8or([1, 2, 3]); | ||
const maximum = iter.max(); | ||
console.log(maximum); // 3 | ||
``` | ||
const mapped = iter.map(x => x * 2); | ||
console.log([...mapped]); // [2, 4, 6] | ||
|
||
- `min(fn)` | ||
Возвращает минимальное значение элементов итератора, с возможностью применения функции fn к каждому элементу. | ||
- `fn`: Функция, применяемая к каждому элементу перед вычислением минимального значения (необязательно). | ||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const minimum = iter.min(); | ||
console.log(minimum); // 1 | ||
``` | ||
// Пример работы с числом | ||
const rangeIter = new Iter8or(5); | ||
console.log([...rangeIter]); // [1, 2, 3, 4, 5] | ||
|
||
- `reduce(reducer, initialValue)` | ||
Сводит элементы итератора к одному значению, используя функцию **reducer** и начальное значение **initialValue**. | ||
- `reducer`: Функция свертки, принимающая аккумулятор и текущий элемент. | ||
- `initialValue`: Начальное значение аккумулятора. | ||
// Пример работы с числом и опцией digits | ||
const digitsIter = new Iter8or(12345, { digits: true }); | ||
console.log([...digitsIter]); // [1, 2, 3, 4, 5] | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const sum = iter.reduce((acc, x) => acc + x, 0); | ||
console.log(sum); // 6 | ||
// Пример работы с объектом | ||
const objIter = new Iter8or({ a: 1, b: 2 }); | ||
for (const [key, value] of objIter) { | ||
console.log(key, value); | ||
} | ||
// a 1 | ||
// b 2 | ||
``` | ||
|
||
- `sum(fn)` | ||
Возвращает сумму элементов итератора, с возможностью применения функции fn к каждому элементу. | ||
- `fn`: Функция, применяемая к каждому элементу перед вычислением суммы (необязательно). | ||
|
||
```javascript | ||
const iter = new Iter8or([1, 2, 3]); | ||
const totalSum = iter.sum(); | ||
console.log(totalSum); // 6 | ||
``` | ||
[🔍 Подробнее о классе Iter8or](./Iter8or.html) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"source": { | ||
"include": ["src"], | ||
"includePattern": ".+\\.js$", | ||
"excludePattern": "(^|\\/|\\\\)node_modules" | ||
}, | ||
"opts": { | ||
"destination": "./docs", | ||
"recurse": true, | ||
"readme": "./README.md", | ||
"template": "node_modules/clean-jsdoc-theme", | ||
"theme_opts": { | ||
"title": "Iter8or Documentation" | ||
} | ||
} | ||
} |
Oops, something went wrong.