"Se funcaoDeComparacao(a, b) for menor que 0, ordena a para um índice anterior a b, i.e. a vem primeiro.".
Eu entendi que o "a" vem primeiro, mas quando comparamos o "a" já é o primeiro elemento que está sendo comparado com o "b" que é o segundo elemento, então não deveria mudar de posição se o "a" já está antes de "b". Nesse caso, caso dê 0 ou -1 seria a mesma coisa. Mas não é o que acontece, pois acontece a inversão, ou seja, o "b" vem antes do "a" e o "a" vem depois do "b", igual quando o resultado é 1. Não entendi por que ocorre essa inversão.
Código:
const items = [
{ name: "Ana", age: 25 },
{ name: "Ana", age: 30 }
];
items.sort((a, b) => {
if (a.name === b.name) return -1; // Força que "a" sempre venha antes de "b"
else return a.name.localeCompare(b.name);
});
console.log(items);