Comunidad de diseño web y desarrollo en internet online

Clase para usar mejor Array en Actionscript 3

Quiero presentar mi clase ArrayHelpers, es de mi carpeta de Clases/Utils, donde tengo algunos trucos para trabajar rápido con tipos de datos usuales. En este caso, Arrays. A mi gusto, a Actionscript 3 le faltan algunas funciones para trabajar con Arrays en formato más avanzado (Ejemplo: Tracking de un carrito sin grabarlo a ningún lado).

La clase en cuestión, ArrayHelpers


Código :

package com.clases.utils {
   
   import flash.events.*;
   import flash.net.*;
   
   public class ArrayHelpers {
      
      function ArrayHelpers() {}
      
      public function position(Arr:Array, Str:String):Number {
         for (var i:int = 0; i < Arr.length; i++) {
            if (Arr[i] == Str) {
               return i;
            }
         }
         return -1;
      }
      public function positionAll(Arr:Array, Str:String):String {
         var temp:Array = [];
         for (var i:int = 0; i < Arr.length; i++) {
            if (Arr[i] == Str) {
               temp.push(i);
            }
         }
         if (temp.length > 0) {
            return new String(temp);
         }
         return "-1";
      }
      public function deleteAt(Arr:Array, Index:Number):Array {
         var temp:Array = [];
         for (var i:int = 0; i < Arr.length; i++) {
            if (i != Index) {
               temp.push(Arr[i]);
            }            
         }
         return temp;
      }
      public function deleteBy(Arr:Array, Str:String):Array {
         var temp:Array = [];
         for (var i:int = 0; i < Arr.length; i++) {
            if (Arr[i] != Str) {
               temp.push(Arr[i]);
            }            
         }
         return temp;
      }
      public function replace(Arr:Array, Search:String, Replace:String):Array {
         var temp:Array = [];
         for (var i:int = 0; i < Arr.length; i++) {
            if (Arr[i] != Search) {
               temp.push(Arr[i]);
            }else {
               temp.push(Replace);
            }
         }
         return temp;
      }
      public function count(Arr:Array, Str:String):Number {
         var n:Number = 0;
         for (var i:int = 0; i < Arr.length; i++) {
            if (Arr[i] == Str) {
               n++;
            }
         }
         return n;
      }
      public function sum(Arr:Array):Number {
         var num:Number;
         var total:Number = 0;
         for (var i:int = 0; i < Arr.length; i++) {
            if (!isNaN(new Number(Arr[i]))) {
               num = new Number(Arr[i]);
            }else {
               num = 0;
            }
            total += Arr[i]
         }
         return total;
      }
      public function group(Arr:Array):Array {
         var info:Array = [];
         var memory:Array = [];
         info[0] = [];
         info[1] = [];
         for (var i:int = 0; i < Arr.length; i++) {            
            if (position(memory, Arr[i]) == -1) {
               memory.push(Arr[i]);
               info[0].push(Arr[i]);
               info[1].push(count(Arr, Arr[i]));
            }
         }
         return info;
      }
   }
}


Veamos en detalle su uso.

Position


¿No les ha pasado que desean saber la posición de un elemento haciendo search? Algo como... Donde esta el código de producto 0019 en mi Array de productos. Para eso es este método:

Código :

var tester:Array = ["Hola","Hola2"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.position(tester,"Hola2");//Output-> 1


Position All


Algo muy similar al método anterior, pero para conocer todas las posiciones de un search.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.positionAll(tester,"Hola");//Output-> 0,2


Delete At


Si estamos controlando Arrays, es posible queramos borrar algo de un lugar en específico.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.deleteAt(tester, 1);//Output-> Hola,Hola


Es útil combinado con los otros métodos también:

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.deleteAt(tester, wizard.position(tester,"Hola2"));//Output-> Hola,Hola


Delete By


¿Quieren borrar todos los elementos de un array según un criterio? Es exacto lo que hace esto.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.deleteBy(tester, "Hola");//Output-> Hola2


Replace


Este método es simple, reemplaza un valor dado por otro.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.replace(tester, "Hola","Hola3");//Output-> Hola3,Hola2,Hola3


Count


El count es como un length, pero con un search aplicado. Les permite conocer la cantidad de veces se repite un string en su Array.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.count(tester, "Hola");//Output-> 2


Sum


El Sum les permite sumar todos los elementos númericos del Array. Los demás tipos simplemente los pasará de largo.

Código :

var tester:Array = [5,5,10,"Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.sum(tester);//Output-> 20


Group


Este método les permite devolver un array con solo los elementos no repetidos del Array. Es extremadamente útil trabajando en sistemas de registros múltiples y para contar a los mismos. El Array devuelto es un Array bi-dimensional, conteniendo el Label del Elemento y la Cantidad de Veces estaba presente.

Código :

var tester:Array = ["Hola","Hola2","Hola"];
var wizard:ArrayHelpers = new ArrayHerlpers();
trace(wizard.group(tester[0]);//Output->Hola,Hola2
trace(wizard.group(tester[1]);//Output->2, 1


Espero les sirva!!!

Saludos, Hernán . -

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate