См. https://v8.dev/blog/array-sort
Это поведение зависит от реализации.Ваш алгоритм сортировки сохраняет порядок, если реализация сортировки является стабильной и в противном случае имеет непредсказуемое поведение.Некоторые движки используют разные алгоритмы в зависимости от длины массива.Иногда нестабильность можно увидеть только в массивах некоторой длины.
Например, Node.js 10 с V8 6.8 будет выводить:
[ { same: 0, value: 0 },
{ same: 0, value: 1 },
{ same: 0, value: 2 },
{ same: 0, value: 3 },
{ same: 0, value: 4 } ]
[ { same: 0, value: 8 },
{ same: 0, value: 0 },
{ same: 0, value: 2 },
{ same: 0, value: 3 },
{ same: 0, value: 4 },
{ same: 0, value: 5 },
{ same: 0, value: 6 },
{ same: 0, value: 7 },
{ same: 0, value: 1 },
{ same: 0, value: 9 },
{ same: 0, value: 10 },
{ same: 0, value: 11 },
{ same: 0, value: 12 },
{ same: 0, value: 13 },
{ same: 0, value: 14 },
{ same: 0, value: 15 } ]
В то время как Node.js 11 с V8 7.0 со стабильнымотсортировать вывод:
[ { same: 0, value: 0 },
{ same: 0, value: 1 },
{ same: 0, value: 2 },
{ same: 0, value: 3 },
{ same: 0, value: 4 } ]
[ { same: 0, value: 0 },
{ same: 0, value: 1 },
{ same: 0, value: 2 },
{ same: 0, value: 3 },
{ same: 0, value: 4 },
{ same: 0, value: 5 },
{ same: 0, value: 6 },
{ same: 0, value: 7 },
{ same: 0, value: 8 },
{ same: 0, value: 9 },
{ same: 0, value: 10 },
{ same: 0, value: 11 },
{ same: 0, value: 12 },
{ same: 0, value: 13 },
{ same: 0, value: 14 },
{ same: 0, value: 15 } ]