removiendo Items de un Array.

Es bonito ver que "gente" que ha estado con nosotros durante tanto tiempo, se moderniza, o por lo menos sus creadores se toman el tiempo para preguntar "qué le podemos agregar a este typo para hacerlo aún más util?".
este es el caso del siempre bien querido Array.
Un Array siempre ha sido útil, y es uno de los preferidos para guardar info y tener esta info a mano, ya que es nada más cuestión de crealo y empezar a "echarle" valores para usarlo luego.
El problema era cuando habia que recorrer el bendido array para ver si existia un valor, o aún peor cuando habia que remover algún valor.

removiendo items, the oldWay

imágina que tenés un array el cual continene objetos o valores, y en determinado momento tenés que eliminar los elementos cuyo valor sea x.

[code]
var userData:Array = new Array(0,1,2,3,4,5,3,4,3,3,2,1);
trace(userData.toString());
function removeItemsOldWay(array:Array, removeValue:Number):Array{
var outputArray:Array = new Array();
for( var i:Number = 0; i < array.length; i++)
{
if( array[i] != removeValue)
{
outputArray.push(array[i]);
}
}
return outputArray;
}
userData = removeItemsOldWay(userData,3);
trace(userData.toString());
[/code]

La forma fácil es recorrer el arreglo, y regresar sólo los valores que son diferentes a los que queremos obtener
[code]if( array[i] != removeValue)
{
outputArray.push(array[i]);
}[/code]

otrá más complicada buscar los índices en los que los valores coincides y aplicarle el bisturí al array(usando array.slice)

Qué hay de nuevo Array?


Array as3, es el típico perro viejo que aprendió nuevos trucos (sin aluciones personales). acá algunos de sus nuevos features.

  • Array.every

  • Array.filter

  • Array.forEach

  • Aarray.map

  • Aarray.some


En este post me voy a concentrar en Array.filter, la otra gente queda para futuras ocasiones o mejor aún se las dejo de tarea. =P

removiendo items the new groovy way

Array filter, ejecuta una acción en cada uno de los items/índices que conforman el arreglo, regresando un nuevo array conteniendo los elementos que cumplieron una condicion, especificada dentro de la función que se usa como argumento. es decir, si queremos que en el arreglo [code]new Array(0,1,2,3,4,5,3,4,3,3,2,1);[/code] nos regrese los elementos que tiene el valor 3, este nos regresaría un array con 2 valores., la funcion ser vería algo como:

[code]function gimmeLos3(element:*, index:int, arr:Array):Boolean {
return (element == 3);
}[/code]

regresando true únicamente cuando el elemento tenga el valor 3, y agregando este valor al nuevo arreglo.
Para este caso en particular lo que queremos lograr es todo lo contrario, es obtener los objetos cuyos valores sean diferentes al valor que queremos remover.

[code]function gimmeLos3(element:*, index:int, arr:Array):Boolean {
return (element != valorAEliminar);
}[/code]

otra cosa que se puede hacer es enviar una función anónima como argumento, y así poder usar argumentos dentro de esta.
[code]
var userData:Array = new Array(0,1,2,3,4,5,3,4,3,3,2,1);
trace(userData.toString());
function removeItems(array:Array, removeValue:Number):Array{
var outputArray:Array = array.filter(function (item:*, index:int,array:Array):Boolean
{
return (item != removeValue);
});
return outputArray;
}
userData = removeItems(userData,3);
trace(userData.toString());
[/code]

nótese que la función removeItems soporta dos argumentos, el array y el valor a verificar, nótese además que este valor es pasado dentro de la función anónima, usándolo así como valor verificador
[code]return (item != removeValue);[/code]

Otros usos

Estos nuevos métodos del array son útiles no sólo para remove items, también se puede usar para actualizar los objetos dentro de un arreglo (usando forEach), saber cuántos objetos cumplen x condición (array.filter(function).length), o como en el ejemplo de flash, donde tiene la lista de usurios en un arreglo y quiere saber cuáles son administradores.

2 Comments

andres said:

Como andas? che, muy bueno el blog, hace rato que lo tengo en bloglines...

Con respecto a lo que comentas de los array en AS2, hace un tiempo sumule las funciones que comentas junto con otras para utilizarlas con arrays, te dejo en link para que las veas http://www.3wstudio.com.ar/index.php?idPost=227 talvez algo tarde ya que en as3 las implementan, pero bueno...


Saludos!