Сортировать массив по его содержимому - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть массив, который выглядит следующим образом:

markerArray[i] = [i, title, cat];

этот массив находится в цикле for, добавляя содержимое динамически

, поэтому результат может выглядеть примерно так:

markerArray[0] = [0, A title, A];
markerArray[1] = [1, A title new, B];
markerArray[3] = [3, A title, E];
markerArray[4] = [4, A title, A];

Так что мой вопрос в том, как я могу или возможно отсортировать массив так, чтобы вывод был основан на A, BC и т. Д. Или на заголовке, или на том, что взято из массива, как этот, обратите внимание, что последний (категория) теперь в алфавитном порядке:

    markerArray[0] = [0, A title, A];
    markerArray[1] = [4, A title, A];
    markerArray[2] = [1, A title new, B];
    markerArray[3] = [3, A title, E];

Возможно ли это?

Ответы [ 5 ]

2 голосов
/ 29 сентября 2011

попробуй -

var markerArray = new Array();
markerArray[0] = [0, "A title", "A"];
markerArray[1] = [1, "A title new", "B"];
markerArray[3] = [3, "A title", "E"];
markerArray[4] = [4, "A title", "Z"];
markerArray[5] = [5, "A title", "A"];


markerArray.sort(function(a, b) {
   var comp1 = a[2];
   var comp2 = b[2];
   return (comp1 < comp2) ? -1 : (comp1 > comp2) ? 1 : 0;
})

alert(markerArray);
1 голос
/ 29 сентября 2011

Вы должны использовать функцию sort , доступную в объекте Array. Эта функция / метод принимает пользовательскую функцию для определения порядка сортировки элементов.

function customSorter( a, b )
{
    var comp1 = a[2];
    var comp2 = b[2];
    return (comp1 < comp2) ? -1 : (comp1 > comp2) ? 1 : 0;
}
var markerArray = new Array();
markerArray[0] = [0, "A title", "A"];
markerArray[1] = [1, "A title new", "B"];
markerArray[3] = [3, "A title", "E"];
markerArray[4] = [4, "A title", "Z"];
markerArray[5] = [5, "A title", "A"];

markerArray.sort( customSorter );

Полезная информация: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

0 голосов
/ 29 сентября 2011

Вы можете попробовать такие вещи:

   markerArray.sort(function(a,b){ 
      for (i = 0; i <= 3 ; i++) {
         if (a[i] <> b[i]) {
            if (a[i] < b[i]) return -1;
            if (a[i] > b[i]) return 1;
         }
      }
      return 0;
   });

Это попытается отсортировать по первому элементу, если они идентичны, оно попытается отсортировать по второму и так далее с третьимone.

[EDIT] Добавление некоторых интересных ссылок (см. также другие ответы):

0 голосов
/ 29 сентября 2011

Вы можете передать функцию сравнения в качестве параметра методу Array.sort и записать логику сравнения в функцию сравнения. Смотрите здесь https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

0 голосов
/ 29 сентября 2011

Использовать пользовательскую функцию сортировки.Прочитайте документацию как это сделать.

...