Метод Array.prototype.sort предназначен для сортировки массива. Этот метод принимает параметр функции для указания правила сортировки.
Давайте сначала рассмотрим простое применение сортировки:
вар arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] Расположите от меньшего к большему
// Теперь расположите от большего к меньшему, чтобы получить [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//Здесь метод сортировки использует возвращаемое значение 1 или -1 функции параметра, чтобы решить, следует ли сортировать порядке или в обратном порядке
. Помните, что я говорил вам ранее об использовании метода Function.apply для получения самого большого элемента в массиве?
В статье используются два разных метода для получения максимального значения в массиве.
Теперь sort тоже может похвастаться.
var arr=[2,1,3,4];
вар minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // А как насчет arr.sort().pop()
? Это также альтернативный метод реализации. Нет необходимости писать обход цикла.
Однако я должен отметить, что этот метод наименее эффективен. Вы все равно можете использовать этот метод для массивов с десятками или сотнями элементов.
Однако, если массив очень большой, использование метода sort() может оказаться настолько медленным, что вам захочется курить
. Дальнейшее обсуждение сортировки сложных структур данных.
1. Сортировка многомерных массивов
вар arr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
];
alert("Сортировка по умолчанию по первому столбцуn"+arr.sort().join("n"))
alert("Теперь отсортируйте по третьему столбцуn"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("Теперь отсортируйте в обратном порядке по третьему столбцуn"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ") )
2. Сортировка сложных структур данных
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)} //Распечатываем имя
var arr=[
{имя:"счет",деньги:500},
{name:"go_rush",деньги:400},
{имя:"дуду",деньги:9000}
];
//Показать dudu, bill, go_rush по порядку. Кажется, дуду самый богатый, а я самый бедный.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. Сортируя таблицу, я вчера со всеми разговаривал на эту тему.
См. также:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
Более сложная сортировка таблиц (также с использованием функции сортировки Array):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. В Protype.js есть очень умное расширение для сортировки. Давайте сначала посмотрим на его код:
1 sortBy: function(iterator) {.
2 return this.collect(function(value, index) {
3 return {значение: значение, критерии: итератор (значение, индекс)};
4 }).sort(function(left, right) {
5 вар a = левый.критерий, b = правый.критерий;
6 вернуть а < б ? -1: а > б 1: 0;
7 }).pluck('значение');
8},
Этот sortBy позволяет вам передать функцию, выполнить функцию с каждым элементом массива в качестве параметра и, наконец, отсортировать результаты, возвращаемые функцией.
Позвольте мне раскрыть его функцию ниже.
Метод сбора на самом деле является методом карты. Он эквивалентен.
Array.prototype.map=function(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
вернуть возврат
}
Например, сейчас
обр=[2,1,4,3]
iterator=function(x){return x*x}
Получить такой массив можно за 1-3 строки кода
[
{значение:2,критерий:4},
{значение:1,критерий:1},
{значение: 4, критерии: 16},
{значение:3,критерий:9}
]
4-6 строк кода сортируют массив по критериям: от меньшего к большему. После сортировки получаем.
[
{значение:1,критерий:1},
{значение:2,критерий:4},
{значение:3,критерий:9},
{значение:4,критерий:16}
]
Строка 7 кода является самой простой. Она принимает атрибут value каждого элемента и, наконец, получает [1,2,3,4] для реализации sortBy(function...) для сортировки arr.
Возможно, мои возможности языкового выражения ограничены. Когда я говорю о sortBy в прототипе.js, я просто не знаю, как выразить это словами.
Мне очень жаль, что всем приходится так усердно читать код объяснения, который я написал
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html
!