import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/functional/ru/Data Utils'/>

# Утилиты для работы с данными

Набор функций для обработки, итерации и управления данными.

## `arrFill`

Создает массив из заданного количества элементов, заполненных одинаковым значением.

**Параметры:**
- `value: T` — значение для заполнения массива
- `count: number` — количество элементов в массиве

```javascript
import { arrFill } from '@dxtmisha/functional'

arrFill('hello', 3) // ['hello', 'hello', 'hello']
arrFill(0, 5) // [0, 0, 0, 0, 0]
arrFill({ id: 1 }, 2) // [{ id: 1 }, { id: 1 }]
```

## `copyObject`

Создает глубокую копию объекта через JSON сериализацию.

**Параметры:**
- `value: T` — объект для копирования

```javascript
import { copyObject } from '@dxtmisha/functional'

const original = { name: 'John', data: { age: 30 } }
const copy = copyObject(original)
copy.data.age = 25 // original.data.age остается 30
```

## `forEach`

Универсальная функция итерации для массивов, объектов и Map.

**Параметры:**
- `data: D` — объект для итерации (массив, объект или Map)
- `callback: (item: T, key: K, dataMain: typeof data) => R` — функция, вызываемая для каждого элемента

```javascript
import { forEach } from '@dxtmisha/functional'

forEach([1, 2, 3], (item, index) => item * 2) // [2, 4, 6]
forEach({ a: 1, b: 2 }, (value, key) => `${key}=${value}`) // ['a=1', 'b=2']
forEach(new Map([['x', 10]]), (value, key) => `${key}:${value}`) // ['x:10']
```

## `getClipboardData`

Асинхронно получает текстовые данные из буфера обмена.

**Параметры:**
- `event?: ClipboardEvent` — событие буфера обмена (опционально)

```javascript
import { getClipboardData } from '@dxtmisha/functional'

const text = await getClipboardData(event) // из события paste
const clipboardText = await getClipboardData() // прямое чтение
```

## `getColumn`

Извлекает значения определенного столбца из массива объектов.

**Параметры:**
- `array: ObjectOrArray<T>` — массив объектов для обработки
- `column: K` — ключ столбца для извлечения

```javascript
import { getColumn } from '@dxtmisha/functional'

const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
const names = getColumn(users, 'name') // ['Alice', 'Bob']
```

## `getExp`

Создает регулярное выражение для безопасного поиска текста с экранированием.

**Параметры:**
- `value: string` — текст для поиска
- `flags: string` — флаги регулярного выражения (по умолчанию `'ig'`)
- `pattern: string` — шаблон (по умолчанию `:value`)

```javascript
import { getExp } from '@dxtmisha/functional'

const regex = getExp('hello') // /hello/ig
const regexSpecial = getExp('$100') // /\$100/ig (экранировано)
```

## `getItemByPath`

Получает значение из вложенного объекта по строковому пути.

**Параметры:**
- `item: T` — объект для обхода
- `path: string` — путь через точку (например, `'user.profile.name'`)

```javascript
import { getItemByPath } from '@dxtmisha/functional'

const data = { user: { profile: { name: 'John' } } }
const name = getItemByPath(data, 'user.profile.name') // 'John'
```

## `getLengthOfAllArray`

Возвращает массив с длинами всех строк.

**Параметры:**
- `value: ObjectOrArray<string>` — массив строк или объект

```javascript
import { getLengthOfAllArray } from '@dxtmisha/functional'

getLengthOfAllArray(['hello', 'world']) // [5, 5]
```

## `getMaxLengthAllArray`

Находит максимальную длину строки в массиве.

**Параметры:**
- `data: ObjectOrArray<string>` — массив строк или объект

```javascript
import { getMaxLengthAllArray } from '@dxtmisha/functional'

getMaxLengthAllArray(['hello', 'world']) // 5
```

## `getMinLengthAllArray`

Находит минимальную длину строки в массиве.

**Параметры:**
- `data: ObjectOrArray<string>` — массив строк или объект

```javascript
import { getMinLengthAllArray } from '@dxtmisha/functional'

getMinLengthAllArray(['hello', 'hi']) // 2
```

## `getObjectByKeys`

Возвращает новый объект с указанными ключами из исходного объекта.

**Параметры:**
- `data: Record<string, any>` — исходный объект
- `keys: string[]` — список ключей для извлечения

```javascript
import { getObjectByKeys } from '@dxtmisha/functional'

const obj = { a: 1, b: 2, c: 3 }
const filtered = getObjectByKeys(obj, ['a', 'c']) // { a: 1, c: 3 }
```

## `getObjectNoUndefined`

Удаляет из объекта все свойства с указанным значением (по умолчанию undefined).

**Параметры:**
- `data: T` — объект для обработки
- `exception: any` — значение для исключения (по умолчанию undefined)

```javascript
import { getObjectNoUndefined } from '@dxtmisha/functional'

const obj = { a: 1, b: undefined, c: 3 }
const cleaned = getObjectNoUndefined(obj) // { a: 1, c: 3 }
```

## `getObjectOrNone`

Возвращает объект если он не пустой, иначе возвращает undefined.

**Параметры:**
- `data: T` — объект для проверки

```javascript
import { getObjectOrNone } from '@dxtmisha/functional'

getObjectOrNone({ a: 1 }) // { a: 1 }
getObjectOrNone({}) // undefined
```

## `setValues`

Устанавливает значения в объекте по указанным путям.

**Параметры:**
- `target: Record<string, any>` — целевой объект
- `values: Record<string, any>` — объект со значениями для установки

```javascript
import { setValues } from '@dxtmisha/functional'

const obj = {}
setValues(obj, { 'user.name': 'John', 'user.age': 30 })
// obj теперь { user: { name: 'John', age: 30 } }
```

## `splice`

Удаляет элементы из массива и возвращает новый массив.

**Параметры:**
- `array: T[]` — исходный массив
- `index: number` — индекс начала удаления
- `deleteCount?: number` — количество удаляемых элементов

```javascript
import { splice } from '@dxtmisha/functional'

splice([1, 2, 3, 4], 1, 2) // [1, 4]
splice(['a', 'b', 'c'], 0, 1) // ['b', 'c']
```

## `uniqueArray`

Удаляет дубликаты из массива.

**Параметры:**
- `array: T[]` — массив для обработки

```javascript
import { uniqueArray } from '@dxtmisha/functional'

uniqueArray([1, 2, 2, 3, 1]) // [1, 2, 3]
uniqueArray(['a', 'b', 'a', 'c']) // ['a', 'b', 'c']
```

## `writeClipboardData`

Записывает данные в буфер обмена.

**Параметры:**
- `data: string` — данные для записи в буфер обмена

```javascript
import { writeClipboardData } from '@dxtmisha/functional'

await writeClipboardData('Hello, World!') // записывает текст в буфер
await writeClipboardData(JSON.stringify({key: 'value'})) // записывает JSON
```
