[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],
  by?: (item: T) => unknown,
): readonly [T, T];
```

Defined in: [packages/common/src/Array.ts:691](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Array.ts#L691)

Returns a new readonly array with duplicate items removed. Items are compared
using `Set` equality (SameValueZero): primitives by value, and objects and
arrays by reference. If `by` is provided, it derives the comparison key.

Preserves non-empty type.

### Deduplicating by value or key

```ts
import {
  assertEqual,
  assertType,
  dedupeArray,
  type NonEmptyReadonlyArray,
} from "@evolu/common";

const numbers = dedupeArray([1, 2, 1, 3, 2]);
const people = dedupeArray(
  [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob" },
    { id: 1, name: "Alice 2" },
  ],
  (item) => item.id,
);
assertType<NonEmptyReadonlyArray<number>, typeof numbers>();
assertEqual(numbers, [1, 2, 3]);
assertEqual(people, [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
]);
```

## Call Signature

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

Defined in: [packages/common/src/Array.ts:696](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Array.ts#L696)

Possibly empty array.