# Source: https://oxc.rs/docs/guide/usage/linter/rules/typescript/require-array-sort-compare.md

## What it does

This rule requires Array.sort() to be called with a comparison function.

## Why is this bad?

When Array.sort() is called without a comparison function, it converts elements to strings and sorts them lexicographically. This often leads to unexpected results, especially with numbers where `[1, 10, 2].sort()` returns `[1, 10, 2]` instead of `[1, 2, 10]`.

## Examples

Examples of **incorrect** code for this rule:

```ts
const numbers = [3, 1, 4, 1, 5];
numbers.sort(); // Lexicographic sort, not numeric

const mixedArray = ["10", "2", "1"];
mixedArray.sort(); // Might be intended, but explicit compareFn is clearer

[3, 1, 4].sort(); // Will sort as strings: ['1', '3', '4']
```

Examples of **correct** code for this rule:

```ts
const numbers = [3, 1, 4, 1, 5];

// Numeric sort
numbers.sort((a, b) => a - b);

// Reverse numeric sort
numbers.sort((a, b) => b - a);

// String sort (explicit)
const strings = ["banana", "apple", "cherry"];
strings.sort((a, b) => a.localeCompare(b));

// Custom object sorting
interface Person {
  name: string;
  age: number;
}

const people: Person[] = [
  { name: "Alice", age: 30 },
  { name: "Bob", age: 25 },
];

people.sort((a, b) => a.age - b.age);
people.sort((a, b) => a.name.localeCompare(b.name));
```

## Configuration

This rule accepts a configuration object with the following properties:

## ignoreStringArrays

type: `boolean`

default: `true`

Whether to ignore arrays in which all elements are strings.

## How to use

To **enable** this rule using the config file or in the CLI, you can use:

::: code-group

```json [Config (.oxlintrc.json)]
{
  "rules": {
    "typescript/require-array-sort-compare": "error"
  }
}
```

```bash [CLI]
oxlint --type-aware --deny typescript/require-array-sort-compare
```

:::

## References

* Rule Source
* Rule Source (tsgolint)