Сортировка массива с массивами в нем по строке
У меня есть массив, содержащий несколько массивов, и я хотел бы заказать массивы на основе определенной строки внутри этих массивов.
var myArray = [
[1, 'alfred', '...'],
[23, 'berta', '...'],
[2, 'zimmermann', '...'],
[4, 'albert', '...'],
];
Как я могу отсортировать его по имени, чтобы альберт пришел первым, а циммерман последним?
Я знаю, как бы это сделать, если бы я мог использовать целое число для сортировки, но строка оставляет меня невежественной.
Спасибо за вашу помощь!:)
Ответы
Ответ 1
Это может быть достигнуто путем передачи поддерживающей функции в качестве аргумента вызова метода Array.sort
.
Что-то вроде этого:
function Comparator(a, b) {
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
}
var myArray = [
[1, 'alfred', '...'],
[23, 'berta', '...'],
[2, 'zimmermann', '...'],
[4, 'albert', '...'],
];
myArray = myArray.sort(Comparator);
console.log(myArray);
Ответ 2
Вы все еще можете использовать array.sort()
с пользовательской функцией. Внутри функции просто сравните элемент, который вы хотите использовать в качестве ключа. Например, вы можете использовать:
myArray.sort(function(a, b) {
return a[1] > b[1] ? 1 : -1;
});
Ответ 3
Теперь есть более простой способ:
myArray = myArray.sort(function(a, b) {
return a[1].localeCompare(b[1]);
})
Это тоже нечувствительно к регистру.
Источник: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
Ответ 4
Awesome! Составная сортировка по первому элементу, второму элементу, а затем третьему, все восходящие в этом примере будут
myArray=myArray.sort(function(a,b){
retVal=0;
if(a[0]!=b[0]) retVal=a[0]>b[0]?1:-1;
else if(a[1]!=b[1]) retVal=a[1]>b[1]?1:-1;
else if(a[2]!=b[2]) retVal=a[2]>b[2]?1:-1;
return retVal
});
(несколько сортировок по нескольким столбцам)
Ответ 5
В ES6 можно сделать относительно простую:
myArray.sort(([a], [b]) => a.localeCompare(b))
или
myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
Полезные/современные биты являются оператором лямбда =>
и деструктурированием аргумента [X]
.