Другое решение этой проблемы может быть достигнуто с помощью Array.sort () в сочетании с String.match () и уже упомянутым String.localeCompare () .Обратите внимание, это также будет работать, если у вас есть составные фамилии.
const input = ["John Alpha", "Elle Cappa", "Allen Beta", "Rob Collyses Chung"];
input.sort(
(a, b) => b.match(/\s(.+)/)[1].localeCompare(a.match(/\s(.+)/)[1])
);
console.log(input);
Более того, вы также должны заметить, что Array.sort()
будет мутировать ваш исходный массив, если вы этого не хотите, вы можете создать копию массиваперед сортировкой, используя Array.slice () .Пример:
const input = ["John Alpha", "Elle Cappa", "Allen Beta", "Rob Collyses Chung"];
let res = input.slice().sort(
(a, b) => b.match(/\s(.+)/)[1].localeCompare(a.match(/\s(.+)/)[1])
);
console.log("Original is not mutated: ", input);
console.log("Sorted copy: ", res);