Melhorando o objeto Array do javascript

O Guilherme falou num post passado sobre "javascript mais hard" com o qual ele tem tido que trabalhar mais desde que veio fazer parte da equipe lá na MMCafé… e se tem uma coisa que quem está já mais acostumado com javascript acha ruim é a classe Array. Poucos métodos para muita coisa que se pode fazer, ainda mais quando se compara com essa classe em outras linguagens.

Mas, para isso, há a propriedade (sempre digo isso: não confundam com a biblioteca Prototype) prototype do javascript, que possibilita a manipulação de objetos do javascript em runtime, adicionando métodos, por exemplo.

Não vou me dedicar ao funcionamento dessa propriedade, pois já expliquei aqui, então vamos a alguns métodos adicionados a classe Array que podem ser muito úteis:

Bubble Sorte

Array.prototype.sort=function()
  {
      var tmp;
      for(var i=0;i<this.length;i++)
      {
          for(var j=0;j<this.length;j++)
          {
              if(this[i]<this[j])
              {
                  tmp = this[i];
                  this[i] = this[j];
                  this[j] = tmp;
              }
          }
      }
  };

Clear

Array.prototype.clear=function()
  {
      this.length = 0;
  };

Contains

 

Array.prototype.contains = function (element)
  {
          for (var i = 0; i < this.length; i++)
       {
              if (this[i] == element)
          {
                      return true;
              }
          }
          return false;
  };

Você pode adicionar os métodos que você precisar; tenha certeza que sua produtividade aumentará!

Percorrendo todos os registros do $_POST

Você vai lá, faz um formulário com 3, 4 campos e manda os dados para um script PHP… simples, do outro lado você só precisa fazer:

$_POST["nome_do_campo1"], $_POST["nome_do_campo2"], etc…

para retornar os valores dos campos.

Mas, e se você quizer automatizar isso? Por exemplo, se você tem um formulário muito grande, ou esse mesmo formulário é montado dinamicamente dependendo de uma tabela específica de um banco de dados… como fazer?

Simples: $_POST é um array que contém uma série de pares chave/valor com o nome do campo e seu valor, passados por POST no request HTTP. Então, é só percorrer o mesmo com o foreach (como se faz num array normal). Segue um exemplo abaixo, onde se printa a lista de chaves/valores:

<?php
$query_string
= "";
if (
$_POST) {
 
$kv = array();
  foreach (
$_POST as $key => $value) {
   
$kv[] = "$key=$value";
  }
 
$query_string = join("&", $kv);
}
else {
 
$query_string = $_SERVER["QUERY_STRING"];
}
echo
$query_string;
?>

Usando a Prototype – passo 3 – arrays e a classe Enumerable

Continuando com os posts sobre usos da Prototype, vamos ver nesse momento a classe Enumerable.
Quando você incorpora a biblioteca no seu projeto, automaticamente é como se a classe Array do javascript passasse a extender Enumerable. Com isso, novos métodos para manipulação são incorporados, deixando muito mais simples a manipulação de arrays.

Vamos ver alguns usos!

Percorrer um array
Da forma tradicional, se usa a diretiva for()
var arr = ["1", "2", "3"];

for(var i=0; i<arr.length; i++) {
alert(arr[i]);
}

Com a classe Enumerable, podemos usar o método each

var arr = ["1", "2", "3"];
arr.each(function(item) {
alert(item);
});

Verificar se todos os valores de um array são maiores (ou menores) do que um determinado valor
Podemos usar o método all() – esse método percorre todos os itens de um array e retorna false caso encontre algum valor false -, passando uma função como parâmetro que retorna true ou false dependendo da condição.

[9, 10, 15].all(function(n) { return n<12; })
//retorna false, pois 15 é maior do que 12

Verificar se um objeto está presente no array
Usamos o método include(object), passando object como parâmetro. Ele varrerá item por item do array e retornará true caso encontre um objeto igual

[´hello´, ´world´].include(´HELLO´);
//retorna false
[´hello´, ´world´].include(´hello´);
//retorna true

Certamente, o método mais simples de usar é o primeiro – até porque interar em cima de arrays é algo comum na vida prática de quem programa em javascript. Mas fica a dica de dar uma olhada nessa classe, pois muito trabalho por nada pode ser evitado se algum dia você se deparar com alguma manipulação mais complexa de arrays.
Inclusive, vale a pena olhar os exemplos de todos os métodos, pois eles são bem explicados e abrangentes!

 

API da Classe Enumerable: http://www.prototypejs.org/api/enumerable