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

<Meta title='@dxtmisha/ru/functional-basic/Functions/replaceRecursive - Рекурсивное слияние объектов или массивов'/>

# `replaceRecursive`

Выполняет глубокое (рекурсивное) слияние исходного объекта или массива с данными из объекта/массива замены. При включенном параметре `isMerge` массивы объединяются с удалением дубликатов, в противном случае массивы из замены перезаписывают исходные.

**Параметры:**
- `array: ObjectItem<I>` — Исходный массив или объект, элементы которого будут заменены/слиты.
- `replacement?: ObjectOrArray<I>` — Массив или объект, из которого будут браться элементы для замены.
- `isMerge: boolean` — Флаг слияния одноименных массивов (по умолчанию `true`). При `false` элементы просто перезаписываются.

**Возвращает:**
`ObjectItem<I>` — Новый объект или массив, являющийся результатом слияния. Исходный объект не мутирует.

```typescript
import { replaceRecursive } from '@dxtmisha/functional-basic'

const target = { a: [1, 2], b: { x: 1 } }
const source = { a: [2, 3], b: { y: 2 } }

console.log(replaceRecursive(target, source)) 
// { a: [1, 2, 3], b: { x: 1, y: 2 } }

console.log(replaceRecursive(target, source, false)) 
// { a: [2, 3], b: { x: 1, y: 2 } }
```
