# array

Advanced utilities for JavaScript array manipulation with support for nested structures, merging, filtering, and more.

## Functions

| Function | Description | Example |
|----------|-------------|---------|
| `find` | Finds an element recursively in nested arrays | `dphelper.array.find(array, 'key')` |
| `delete` | Deletes an element recursively by key | `dphelper.array.delete(array, 'key')` |
| `merge` | Deep merges two objects/arrays (safe from prototype pollution) | `dphelper.array.merge(arrA, arrB)` |
| `mergeByKey` | Merges two arrays of objects via a specific key | `dphelper.array.mergeByKey(arrA, arrB, 'id')` |
| `unique` | Removes duplicate values from an array | `dphelper.array.unique(array)` |
| `asc` | Sorts array in ascending order | `dphelper.array.asc(array)` |
| `desc` | Sorts array in descending order | `dphelper.array.desc(array)` |
| `duplicates` | Finds duplicate elements in an array | `dphelper.array.duplicates(array)` |
| `even` | Filters even numbers from an array | `dphelper.array.even(array)` |
| `odd` | Filters odd numbers from an array | `dphelper.array.odd(array)` |
| `toObj` | Converts an array to an object | `dphelper.array.toObj(array)` |
| `sumColumn` | Sums values of a column in a multidimensional array | `dphelper.array.sumColumn(arr, 0)` |
| `shuffle` | Randomly shuffles elements (Fisher-Yates algorithm) | `dphelper.array.shuffle(array)` |
| `generate` | Generates an array of random numbers (1 to n) | `dphelper.array.generate(10)` |
| `testArrayInt` | Checks for missing numbers in a consecutive sequence | `dphelper.array.testArrayInt([1,2,4])` |
| `rand32` | Generates an array of random 32-bit unsigned integers | `dphelper.array.rand32(5)` |
| `findindex` | Finds the index of an element by key | `dphelper.array.findindex(array, 'name')` |
| `pathToJson` | Converts an array of paths into a JSON object | `dphelper.array.pathToJson(paths, '/')` |
| `deepClone` | Creates a deep clone using structuredClone | `dphelper.array.deepClone(array)` |
| `match` | Finds intersection between two arrays | `dphelper.array.match(arrA, arrB)` |

## Description

Comprehensive array manipulation library that provides utilities for:
- **Recursive operations** - Find, delete in nested structures
- **Merging** - Deep merge with prototype pollution protection
- **Filtering** - Even/odd numbers, duplicates
- **Sorting** - Ascending/descending order
- **Generation** - Random numbers, sequences
- **Conversion** - Array to object, paths to JSON

## Usage Examples

### Finding Elements in Nested Arrays

```javascript
const data = [
  { id: 1, name: 'John', children: [{ id: 2, name: 'Jane' }] },
  { id: 3, name: 'Bob', children: [{ id: 4, name: 'Alice' }] }
];

// Find element with id 2
const found = dphelper.array.find(data, 2);
console.log(found); // { id: 2, name: 'Jane' }
```

### Deep Merging Objects

```javascript
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { b: { d: 3 }, e: 4 };

const merged = dphelper.array.merge(obj1, obj2);
console.log(merged); // { a: 1, b: { c: 2, d: 3 }, e: 4 }

// Safe from prototype pollution
const dangerous = { '__proto__': { dangerous: true } };
const safe = dphelper.array.merge({}, dangerous);
console.log(safe); // { __proto__: { dangerous: true } } - safe!
```

### Merging Arrays by Key

```javascript
const users = [
  { id: 1, name: 'John', age: 30 },
  { id: 2, name: 'Jane', age: 25 }
];

const details = [
  { id: 1, email: 'john@example.com' },
  { id: 2, email: 'jane@example.com' }
];

const merged = dphelper.array.mergeByKey(users, details, 'id');
// Result: [{ id: 1, name: 'John', age: 30, email: 'john@example.com' }, ...]
```

### Finding Duplicates

```javascript
const numbers = [1, 2, 3, 2, 4, 3, 5, 1];
const dups = dphelper.array.duplicates(numbers);
console.log(dups); // [2, 3, 1]
```

### Filtering Even/Odd Numbers

```javascript
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(dphelper.array.even(numbers)); // [2, 4, 6, 8, 10]
console.log(dphelper.array.odd(numbers));   // [1, 3, 5, 7, 9]
```

### Sum Column in Multidimensional Array

```javascript
const matrix = [
  [1, 2, 3],  // row 0
  [4, 5, 6],  // row 1
  [7, 8, 9]   // row 2
];

// Sum first column (index 0)
console.log(dphelper.array.sumColumn(matrix, 0)); // 12 (1+4+7)

// Sum second column (index 1)
console.log(dphelper.array.sumColumn(matrix, 1)); // 15 (2+5+8)
```

### Shuffle Array (Fisher-Yates)

```javascript
const cards = ['A', 'B', 'C', 'D', 'E'];
const shuffled = dphelper.array.shuffle([...cards]);
console.log(shuffled); // Random order, e.g., ['C', 'A', 'E', 'D', 'B']
```

### Generate Random Number Sequence

```javascript
// Generate numbers 1-10 in random order
const sequence = dphelper.array.generate(10);
console.log(sequence); // e.g., [3, 1, 8, 5, 2, 9, 4, 7, 6, 10]
```

### Test for Consecutive Integers

```javascript
// Check for missing numbers in sequence [1, 2, 3, 4, 5]
console.log(dphelper.array.testArrayInt([1, 2, 3, 4, 5])); // [] (complete)

// Check for missing numbers in [1, 2, 4, 5]
console.log(dphelper.array.testArrayInt([1, 2, 4, 5]));    // [3] (missing 3)
```

### Generate Random 32-bit Integers

```javascript
const randomNumbers = dphelper.array.rand32(5);
console.log(randomNumbers.nums);   // [random1, random2, random3, random4, random5]
console.log(randomNumbers.time);  // [execution time in ms]
```

### Path to JSON Conversion

```javascript
const paths = [
  '/users/John',
  '/users/John/profile',
  '/users/John/settings',
  '/users/Jane'
];

const json = dphelper.array.pathToJson(paths, '/');
// Result:
// {
//   users: {
//     John: {
//       profile: null,
//       settings: null
//     },
//     Jane: null
//   }
// }
```

### Deep Clone Array

```javascript
const original = [{ a: 1 }, { b: 2 }];
const cloned = dphelper.array.deepClone(original);

cloned[0].a = 99;
console.log(original[0].a); // 1 (original unchanged)
console.log(cloned[0].a);   // 99
```

### Find Array Intersection

```javascript
const words = ['apple', 'banana', 'cherry', 'date'];
const check = ['banana', 'date', 'elderberry'];

const matches = dphelper.array.match(words, check);
console.log(matches); // ['banana', 'date']
```

## Details

- **Author:** Dario Passariello
- **Version:** 0.0.2
- **Creation Date:** 20210101
- **Last Modified:** 20260220
- **Environment:** Works in both client and server environments

---

*Automatically generated document*
