2014-01-02 5 views
1

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

var arry = [ [1, "Convention Hall", "Mumbai", 10, "XYZ Company"], 
      [2, "Auditorium", "Delhi", 10, "ABC Company"], 
      [3, "CenterHall", "Bangalore", 10, "ZZZ Company"], 
      .... 
      ] 

Я хочу, чтобы отсортировать массив в алфавитном порядке на основе третьего элемента массива, т.е. Arry [п] [2]

Как это сделать.

+0

Итак, это уже отсортировано в этом случае? – thefourtheye

+0

'arry.sort (function (a, b) {return a [2] - b [2];});' – Givi

+0

Он уже отсортирован в этом случае, но проверьте мой ответ. Я изменил названия городов. –

ответ

3

http://jsfiddle.net/VPrAr/

enter image description here

Вы можете использовать arry.sort(). Значение по умолчанию - буквенно-цифровое и по возрастанию.

Так было бы:

var arry = [ [1, "Convention Hall", "Dangalore", 10, "XYZ Company"], 
      [2, "Auditorium", "Belhi", 10, "ABC Company"], 
      [3, "CenterHall", "Aumbai", 10, "ZZZ Company"], 
      ]; 
var x =arry.sort(function(a,b){ return a[2] > b[2] ? 1 : -1; }); 
alert(x); 
+0

Поскольку метод сортировки является мутатором, нет необходимости назначать его новой переменной, и как насчет 'a [2] === b [2]'? – Givi

+0

Согласен. Вопрос плакат получает точку, хотя :) –

+0

Его рабочий штраф – n92

0

попробовать это

//WITH FIRST COLUMN 
    arry = arry.sort(function(a,b) { 
     return a[0] > b[0]; 
    }); 


//WITH SECOND COLUMN 
arry = arry.sort(function(a,b) { 
return a[1] > b[1]; 
}); 


//WITH THIRD COLUMN 
//and you want this code below 
arry = arry.sort(function(a,b) { 
return a[2] > b[2]; 
}); 
1

Используйте функцию сортировки, например:

arry.sort(function(a,b){ 
    return a[2] > b[2] ? 1 : -1; 
}); 
2

Array.prototype.sort функция ожидает функции в качестве параметра, который принимает два параметра и возвращает любой из -1, 0 or 1.

Я очень большой поклонник функционального программирования, поэтому я придумал это. Это обеспечивает гибкость.

  1. Вы можете отсортировать на основе любого элемента
  2. Вы даже можете изменить порядок сортировки
  3. Вы можете настроить, как объекты должны быть сопоставлены.

function basicComparator(first, second) { 
    if (first === second) { 
     return 0; 
    } else if (first < second) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 

function compareNthElements(n, comparatorFunction, reverse) { 
    return function(first, second) { 
     if (reverse === true) { 
      return comparatorFunction(second[n], first[n]); 
     } else { 
      return comparatorFunction(first[n], second[n]); 
     } 
    } 
} 

Вот он. Теперь вызовите функцию sort, как это

arry.sort(compareNthElements(1, basicComparator, true)); // Sorts first field and in reverse 
arry.sort(compareNthElements(2, basicComparator));  // Sorts second field 
+0

Почему бы просто просто не возвращать первую секунду? – Givi

+0

@Givi Возможно, он не работает должным образом для всех типов данных. Например, если оба сравниваемых элемента являются объектами, он вернет «NaN». Итак, я сделал функцию более гибкой, чтобы передать функцию компаратора также :) – thefourtheye

Смежные вопросы