O método Array.prototype.sort serve para classificar o array. Este método usa um parâmetro de função para especificar a regra de classificação
.
var arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] Organizar do pequeno para o grande
// Agora organizar do grande para o pequeno para obter [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//Aqui, o método sort usa o valor de retorno 1 ou -1 da função de parâmetro para decidir se deve classificar ordem ou em ordem inversa
. Lembra do que eu disse antes sobre como usar o método Function.apply para obter o maior elemento em um array?
O artigo usa dois métodos diferentes para obter o valor máximo em um array.
sort
também pode ser exibido.
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // Que tal arr.sort().pop()
? Este também é um método de implementação alternativo.
Porém, devo salientar que este método é o menos eficiente. Você ainda pode usar esta técnica para arrays com dezenas ou centenas de elementos.
No entanto, se a matriz for muito grande, o uso do método sort() pode ser tão lento que dá vontade de fumar
mais discussões sobre ordenação de estruturas de dados complexas.
1. Classificando matrizes multidimensionais
var arr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
];
alert("Padrão classificado pela primeira colunan"+arr.sort().join("n"))
alert("Agora classifique pela terceira colunan"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("Agora classifique na ordem inversa pela terceira colunan"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ") )
2. Classifique estruturas de dados complexas
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)} //Imprimir nome
var arr=[
{nome:"conta", dinheiro:500},
{nome:"go_rush",dinheiro:400},
{nome:"dudu",dinheiro:9000}
];
//Exibir dudu, bill, go_rush em ordem. Parece que dudu é o mais rico e eu sou o mais pobre.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. Classificando a tabela, falei sobre esse assunto com todos ontem.
Veja também:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
Classificação de tabela mais complexa (também usando a função de classificação do Array):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. Existe uma extensão muito inteligente para classificar em Protype.js. Vejamos primeiro seu código:
1 sortBy: function(iterator) {.
2 retorne this.collect(função(valor, índice) {
3 return {valor: valor, critérios: iterador (valor, índice)};
4 }).sort(função(esquerda, direita) {
5 var a = critérios esquerdos, b = critérios direitos;
6 retornar a < b ? -1 : a > b 1 : 0;
7 }).pluck('valor');
8},
Este sortBy permite que você passe uma função, execute a função com cada elemento do array como parâmetro e, finalmente, classifique os resultados retornados pela função.
Deixe-me detalhar sua função abaixo.
O método de coleta é na verdade o método de mapa. É equivalente a.
Array.prototype.map=função(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
retornar ret
}
Por exemplo, agora
arr=[2,1,4,3]
iterator=function(x){return x*x}
Você pode obter esse array em 1-3 linhas de código
[
{valor:2,critérios:4},
{valor:1,critérios:1},
{valor:4,critérios:16},
{valor:3,critérios:9}
]
4-6 linhas de código classificam o array de acordo com critérios: de pequeno a grande. Após a classificação, obtemos.
[
{valor:1,critérios:1},
{valor:2,critérios:4},
{valor:3,critérios:9},
{valor:4,critérios:16}
]
A linha 7 do código é a mais simples. Ela pega o atributo value de cada elemento e finalmente obtém [1,2,3,4] para implementar sortBy(function...) para classificar arr.
Talvez minha capacidade de expressão de linguagem seja limitada. Quando falo sobre sortBy em protótipo.js, simplesmente não sei como expressá-lo em palavras.
Lamento muito que todos tenham que trabalhar tanto para ler o código de explicação que escrevi
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html
!