Skip to content

Commit

Permalink
spec: skip concat test
Browse files Browse the repository at this point in the history
  • Loading branch information
TanyaLagodich committed Aug 31, 2024
1 parent 55e33cb commit fdc58e6
Show file tree
Hide file tree
Showing 12 changed files with 792 additions and 185 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ node_modules
.env
dist
.idea/
docs/
160 changes: 31 additions & 129 deletions README.md
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)
2 changes: 1 addition & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import configPrettier from 'eslint-config-prettier';

export default [
{
ignores: ['dist/**'],
ignores: ['dist/**', 'docs/**'],
},
{
languageOptions: {
Expand Down
16 changes: 16 additions & 0 deletions jsdoc.json
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"
}
}
}
Loading

0 comments on commit fdc58e6

Please sign in to comment.