[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Array](https://evolu.dev/docs/api-reference/common/Array) › dedupeArray

## Call Signature

```ts
function dedupeArray<T>(
  array: readonly [T, T] | [T, ...T[]],
  by?: (item: T) => unknown,
): readonly [T, T];
```

Defined in: [packages/common/src/Array.ts:508](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Array.ts#L508)

Returns a new readonly array with duplicate items removed. If `by` is
provided, it will be used to derive the key for uniqueness; otherwise values
are used directly. Dedupes by reference equality of values (or extracted keys
when `by` is used).

Preserves non-empty type.

### Example

```ts
// Dedupe primitives by value
dedupeArray([1, 2, 1, 3, 2]); // [1, 2, 3]

// Dedupe objects by property
dedupeArray(
  [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob" },
    { id: 1, name: "Alice 2" },
  ],
  (item) => item.id,
); // [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
```

## Call Signature

```ts
function dedupeArray<T>(
  array: readonly T[] | T[],
  by?: (item: T) => unknown,
): readonly T[];
```

Defined in: [packages/common/src/Array.ts:513](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Array.ts#L513)

Possibly empty array.