Алгоритм сортировки массива по нескольким ключам

При работе с массивами данных, одна из наиболее частых задач — сортировка. Стандартную сортировку по одному ключу при помощи метода «.sort» я рассматривать не буду — там все просто и тривиально. Я хочу привести пример, как делать сортировку массива по нескольким ключам — например нам нужно отрендерить табличку, где люди будут отсортированы по возрасту, а внутри одной возрастной группы фамилии должны идти по алфавиту.

 

var arr = [
	{
		name: "Andy",
		surname: "Orlov",
		age: 14
	},
	{
		name: "Andy",
		surname: "Ivanov",
		age: 15
	},
	{
		name: "Bob",
		surname: "Akopyan",
		age: 25
	},
	{
		name: "Han",
		surname: "Solo",
		age: 65
	}
	
];

arr.sort(function(a, b) {	
	// ascending\descending will be changed if you replace "<" to ">"
	return  (b.name.toLowerCase() < a.name.toLowerCase()) - (a.name.toLowerCase() < b.name.toLowerCase()) || 		// sort by name
		(b.surname.toLowerCase() < a.surname.toLowerCase()) - (a.surname.toLowerCase() < b.surname.toLowerCase()) ||    // sort by surname
		(b.age.toLowerCase() < a.age.toLowerCase()) - (a.age.toLowerCase() < b.age.toLowerCase());			// sort by age
});

console.log(arr);

Как видите, ничего сложного, количество ключей может быть бесконечным. Единственное, не забывайте применять метод toLowerCase(), иначе сортировка будет работать некорректно. Чтобы поменять порядок сортировки на обратный - просто поменяйте знак "<" на ">" и наоборот.

Оставить комментарий