Métodos Útiles para Extender el Objeto Array en Javascript

El dia de ayer frogx3 se topo con un ligero problema en javascript con el objeto array ya que necesitaba obtener la posición de un elemento que coincida con un valor proporcionado. Con frameworks como Mootools, Protototype, jQuery (supongo) esto no habria sido problema pero ¿qué pasa cuando no puedes incluir ninguno de esos frameworks? pues tenemos la ventaja en Javascript que podemos añadirle eventos a los objetos nativos de javascript utilizando Prototype (Ojo no el framework) por lo que podriamos definir nuestros propios métodos de una manera sencilla. A continuación les presento una lista de algunos métodos útiles para extender el objeto Array en Javascript:

indexOf

Este método te devuelve la posición de un elemento dentro de un arreglo. Para agregarle este método al objeto array hacemos lo siguiente:

  1. // Array.indexOf( value, begin, strict ) – Regresa el indice del primer elemento que coincida con el valor especificado
  2. if (!Array.prototype.indexOf)
  3. {
  4. Array.prototype.indexOf = function( v, b, s ) {
  5. for( var i = +b || 0, l = this.length; i < l; i++ ) {
  6. if( this[i]===v || s && this[i]==v ) { return i; }
  7. }
  8. return -1;
  9. };
  10. }

Podemos probarlo utilizando el siguiente código:

  1. var arreglo = new Array("a","b","c","d");
  2.  
  3. var posicion = arreglo.indexOf("d");
  4.  
  5. alert(posicion);

lastIndexOf

Devuelve la posición del último elemento encontrado en un arreglo dependiendo de determinado valor.

  1. if (!Array.prototype.lastIndexOf)
  2. {
  3. Array.prototype.lastIndexOf = function(elt /*, from*/)
  4. {
  5. var len = this.length;
  6.  
  7. var from = Number(arguments[1]);
  8. if (isNaN(from))
  9. {
  10. from = len - 1;
  11. }
  12. else
  13. {
  14. from = (from < 0)
  15. ? Math.ceil(from)
  16. : Math.floor(from);
  17. if (from < 0)
  18. from += len;
  19. else if (from  >= len)
  20. from = len - 1;
  21. }
  22.  
  23. for (; from  > ; -1; from)
  24. {
  25. if (from in this && this[from] === elt)
  26. return from;
  27. }
  28. return -1;
  29. };
  30. }

Ejemplo de uso:

  1. var arreglo = new Array("a","d","c","d");
  2.  
  3. var posicion = arreglo.lastIndexOf("d");
  4.  
  5. alert(posicion);

forEach

El forEach que nos permite aplicarle una función a cada elemento de un arreglo.

  1. if (!Array.prototype.forEach)
  2. {
  3. Array.prototype.forEach = function(fun /*, thisp*/)
  4. {
  5. var len = this.length;
  6. if (typeof fun != "function")
  7. throw new TypeError();
  8.  
  9. var thisp = arguments[1];
  10. for (var i = 0; i < len; i++)
  11. {
  12. if (i in this)
  13. fun.call(thisp, this[i], i, this);
  14. }
  15. };
  16. }

Ejemplo de uso:

  1. var arreglo = new Array("a","b","c","d");
  2.  
  3. var posicion = arreglo.indexOf("d");
  4.  
  5. arreglo.forEach(function(j){alert(j);});

Unique

Elimina valores repetidos de un arreglo. este método utiliza el indexOf por lo que para utilizar previamente tenemos que definir el método indexOf

  1. Array.prototype.unique = function( b ) {
  2. var a = [], i, l = this.length;
  3. for( i=0; i<l; i++ ) {
  4. if( a.indexOf( this[i], 0, b ) < 0 ) { a.push( this[i] ); }
  5. }
  6. return a;
  7. };

Ejemplo de uso:

  1. var arreglo = new Array("a","d","c","d");
  2. var arreglo2 = arreglo.unique();
  3. alert(arreglo2);

Random

Obtener un valor aleatorio de un arreglo.

  1. // Array.random( rango) – Regresa un valor aleatorio del arreglo, se puede especificar un valor máximo de posicion.
  2. Array.prototype.random = function( r ) {
  3. var i = 0, l = this.length;
  4. if( !r ) { r = this.length; }
  5. else if( r > 0 ) { r = r % l; }
  6. else { i = r; r = l + r % l; }
  7. return this[ Math.floor( r * Math.random() - i ) ];
  8. };

Ejemplo de uso:

  1. var arreglo = new Array("a","b","c","d");
  2. alert(arreglo.random());

Pueden ver otros métodos aquí

Core Javascript 1.5 Reference:Object Array


Fecha de publicación:  agosto 15, 2007

Notas Relacionadas

dmedina

Fundador de WebAdictos.com.mx / Ingeniero en Sistemas / Desarrollador Web / Blogger / Estudiante de MGTI / apasionado por la tecnología y sobre todo adicto al internet. Puedes seguirme en Twitter @dmedina

#WEB  #TWITTER     Más Entradas de dmedina ➝