Сортировать массив с массивами в нем по строке - PullRequest
55 голосов
/ 25 марта 2011

У меня есть массив, который содержит несколько массивов, и я хотел бы упорядочить массивы на основе определенной строки в этих массивах.

var myArray = [
                [1, 'alfred', '...'],
                [23, 'berta', '...'],
                [2, 'zimmermann', '...'],
                [4, 'albert', '...'],
              ];

Как я могу отсортировать его по имени, чтобы Альберт стоит первым, а Циммерманн идет последним?

Я знаю, как бы я это сделал, если бы мог использовать целое число для сортировки, но строка оставила меня в неведении.*Спасибо за помощь!:)

Ответы [ 5 ]

89 голосов
/ 25 марта 2011

Этого можно добиться, передав функцию поддержки в качестве аргумента в вызов метода 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);
40 голосов
/ 25 марта 2011

Вы все еще можете использовать array.sort() с пользовательской функцией. Внутри функции просто сравните элемент, который вы хотите использовать в качестве ключа. Например, вы можете использовать:

myArray.sort(function(a, b) { 
    return a[1] > b[1] ? 1 : -1;
});
11 голосов
/ 07 сентября 2015

Теперь есть более простой способ:

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

7 голосов
/ 01 августа 2013

Отлично!Составная сортировка по первому элементу, второму элементу, а затем по третьему, все возрастающие в этом примере, будет

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 голосов
/ 18 августа 2017

В ES6 можно сделать сравнительно содержательно:

myArray.sort(([a], [b]) => a.localeCompare(b))

или

myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)

Полезными / современными битами являются лямбда-оператор => и деструктуризация аргумента [X].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...