Array.sortOn()

Disponibilidad
Flash Player 6; se han añadido funciones adicionales en Flash Player 7.
Sintaxis
my_array.sortOn("fieldName")
my_array.sortOn("fieldName", option | option |... )
my_array.sortOn( [ "fieldName" , "fieldName" , ... ] )
my_array.sortOn( [ "fieldName" , "fieldName" , ... ] , option | option |... )
Nota: si se muestran corchetes ([]), debe incluirlos en el código; es decir, los corchetes no representan parámetros opcionales.
Parámetros
fieldName Cadena que identifica un campo (de un elemento de la matriz) que debe utilizarse como valor de clasificación.
option Uno o más números o cadenas, separados por el operador | (OR en modo bit), que cambian el comportamiento o la clasificación respecto al predeterminado. Los siguientes valores de option son aceptables:
  • 1 o Array.CASEINSENSITIVE
  • 2 o Array.DESCENDING
  • 4 o Array.UNIQUE
  • 8 o Array.RETURNINDEXEDARRAY
  • 16 o Array.NUMERIC
Cada una de estas opciones se explica con mayor detalle en "Descripción", a continuación.

Valor devuelto
El valor devuelto depende de si se pasa algún parámetro:
  • Si especifica un valor de 4 o Array.UNIQUE como option y dos o más de los elementos que se están ordenando tienen campos de clasificación idénticos, Flash devuelve un valor de 0 y no modifica la matriz.
  • Si especifica un valor de Array.RETURNINDEXEDARRAY como option, Flash devuelve una matriz que refleja el resultado de la clasificación y no modifica la matriz.
  • De lo contrario, Flash no devuelve nada y modifica la matriz de manera que refleje el orden de clasificación.
Descripción
Método; ordena los elementos de una matriz según uno o más campos de la matriz. Si pasa varios parámetros fieldName, el primer campo representa el campo de clasificación principal, el segundo representa el siguiente campo de clasificación, y así sucesivamente. Flash ordena siguiendo valores ASCII (Unicode). Si alguno de los elementos que se están ordenando no contiene el campo especificado en el parámetro fieldName, se interpreta el campo como undefined, y los elementos se sitúan de manera consecutiva en la matriz sin ningún orden en particular.
De forma predeterminada, Array.sortOn() funciona de esta manera:
  • La clasificación distingue entre mayúsculas y minúsculas (Z va antes que a).
  • La clasificación es ascendente (a va antes que b).
  • La matriz se modifica de manera que refleje el orden de clasificación; múltiples elementos con campos de clasificación idénticos se sitúan de manera consecutiva en la matriz sin ningún orden en particular.
  • Los campos numéricos se ordenan como si fueran cadenas, de manera que 100 va antes que 99, ya que "1" es un valor de cadena menor que "9".
  • No devuelve nada.
Puede utilizar las etiquetas option para omitir estos valores predeterminados. Los siguientes ejemplos utilizan diferentes etiquetas option a efectos ilustrativos. Si quiere ordenar una matriz sencilla (por ejemplo, una matriz con un sólo campo) o si desea especificar un orden de clasificación no admitido por el parámetro options, utilice Array.sort().
Para pasar varias etiquetas en formato numérico, sepárelas con el operador | (OR en modo bit) o sume los valores de los indicadores. El código siguiente muestra tres maneras diferentes de especificar una clasificación numérica descendente:
my_Array.sortOn(nombreCampo, 2 | 16);
my_Array.sortOn(nombreCampo, 18);
my_Array.sortOn(nombreCampo, Array.DESCENDING | Array.NUMERIC);

Considere la siguiente matriz:
var my_array:Array = new Array();
my_array.push({contraseña: "Bob", edad:29});
my_array.push({contraseña: "abcd", edad:3});
my_array.push({contraseña: "barb", edad:35});
my_array.push({contraseña: "catchy", edad:4});
Una clasificación predeterminada del campo de contraseña daría como resultado:
my_array.sortOn("contraseña")
// Bob
// abcd
// barb
// catchy
Una clasificación que no distinga entre mayúsculas y minúsculas del campo de contraseña daría como resultado:
my_array.sortOn("contraseña", Array.CASEINSENSITIVE)
// abcd
// barb
// Bob
// catchy
Una clasificación que no distinga entre mayúsculas y minúsculas, en orden descendente, del campo de contraseña daría como resultado:
my_array.sortOn("contraseña", 1|2)
// catchy
// Bob
// barb
// abcd
Una clasificación predeterminada del campo de edad daría como resultado:
my_array.sortOn("edad")
// 29
// 3
// 35
// 4
Una clasificación numérica del campo de edad daría como resultado:
my_array.sortOn("edad", 16)
// 3
// 4
// 29
// 35
Una clasificación numérica, en orden descendente, del campo de edad daría como resultado:
my_array.sortOn("edad", 18)
// 35
// 29
// 4
// 3
Llevar a cabo una clasificación cambia los elementos de la matriz de la siguiente manera:
// Antes de clasificar
// my_array[0].edad = 29;
// my_array[1].edad = 3;
// my_array[2].edad = 35;
// my_array[3].edad = 4;
// Después de una clasificación que no pase 8 como valor de optionmy_array.sortOn("edad", Array.NUMERIC);
// my_array[0].edad = 3;
// my_array[1].edad = 4;
// my_array[2].edad = 29;
// my_array[3].edad = 35;
Llevar a cabo una clasificación que devuelva una matriz de orden no cambia los elementos de la matriz:
// Antes de clasificar
// my_array[0].edad = 29;
// my_array[1].edad = 3;
// my_array[2].edad = 35;
// my_array[3].edad = 4;
// Después de una clasificación que devuelve una matriz que contiene valores de índice
// Observe que no se ha modificado la matriz original.
// Puede utilizar la matriz devuelta para mostrar información ordenada
// sin modificar la matriz original.
var indexArray:Array = my_array.sortOn("edad", Array.RETURNINDEXEDARRAY);
// my_array[0].edad = 29;
// my_array[1].edad = 3;
// my_array[2].edad = 35;
// my_array[3].edad = 4;

Ejemplo
Este ejemplo crea una nueva matriz y la ordena según los campos name y city: la primera clasificación utiliza name como primer valor de clasificación y city como el segundo. La primera clasificación utiliza city como primer valor de clasificación y name como el segundo.

var rec_array = new Array();
rec_array.push({name:"john", city:"omaha", zip:68144});
rec_array.push({name:"john", city:"kansas city", zip:72345});
rec_array.push({name:"bob", city:"omaha", zip:94010});
for (i=0; i
trace(rec_array[i].name+", "+rec_array[i].city+", "+rec_array[i].zip);
}
// devuelve
//john, omaha, 68144
//john, kansas city, 72345
//bob, omaha, 94010
rec_array.sortOn(["name", "city"]);
for (i=0; i
trace(rec_array[i].name+", "+rec_array[i].city+", "+rec_array[i].zip);
}
//devuelve
//bob, omaha, 94010
//john, kansas city, 72345
//john, omaha, 68144
rec_array.sortOn(["city", "name"]);
for (i=0; i
trace(rec_array[i].name+", "+rec_array[i].city+", "+rec_array[i].zip);
}
//devuelve
//john, kansas city, 72345
//bob, omaha, 94010
//john, omaha, 68144

Véase también
Array.sort()

No hay comentarios:

Publicar un comentario

Comentar esta entrada