Как JavaScript сортирует массивы с одинаковыми значениями свойств?

Вопрос о сортировке массива

Здравствуйте! У меня возник вопрос о том, как именно JavaScript сортирует массив объектов, если у них одинаковые значения для свойства, по которому мы сортируем. У меня есть массив, например:

let array = [
    {id: 0, name: "сам", age: "20"},
    {id: 0, name: "джон", age: "21"},
    {id: 1, name: "фред", age: "30"}
];

Если я хочу отсортировать этот массив по id в возрастающем порядке, как можно узнать, какой объект из двух с id: 0 будет первым в этом случае?

Будет ли это:

{id: 0, name: "сам", age: "20"}

Или это:

{id: 0, name: "джон", age: "21"}

Кто-то может объяснить, как это работает?

В JavaScript сортировка объектов с одинаковыми значениями не гарантирует стабильности. То есть порядок элементов с равными ключами может быть непредсказуемым и зависит от браузера.

А у тебя какая-то конкретная задача? Может нужно добавить вторичную сортировку по другому полю?

На самом деле с ES2019 в JavaScript сортировка стала стабильной. Это значит что элементы с одинаковыми значениями сохраняют свой первоначальный порядок.

В твоем примере “сам” будет первым, а “джон” вторым, потому что они так и стояли в исходном массиве. Но лучше не полагаться на это и явно указывать дополнительные критерии сортировки для надежности.