10/05/2011

Um pouco sobre $.map()

Quem já começou a testar as novas features do jQuery 1.6 levanta a mão… _o/

Venho apresentar algumas das minhas impressões do método $.map, que foi bem incrementada na nova versão. Para quem ainda não conhece, o método permite manipularmos arrays ou objetos de maneira bem prática. 

Quem já precisou manipular esse tipo de dados, sabe o trabalho que dá. Exemplificarei como a nossa vida ficou mais fácil se soubermos utilizar bem o $.map()

Em primeiro lugar, algo bem simples para que possamos entender bem o método: 

$.map( [0,1,2], function(n){
      return n + 10;
}); 

// Resultado:
// [10,11,12] 

A manipulação é completa, inclusive podemos também retirar algum valor da array, caso necessário. 

$.map( [0,10, 20, 30, 40, 50], function(n){
      if(n <= 30) {
            return n;
      }else{
            return null; // Não é necessário, apenas para facilitar a visualização lógica.
      }
});

// Resultado:
// [0, 10, 20, 30] 

Vamos para um exemplo prático. Estou querendo passar apenas os dados que não são vazios de um formulário.

O que precisávamos fazer, sem utilizar o jQuery.map():

var params = form.serializeArray()
      checkedParams = new Array(); 
for(var x = 0; x < params.length; x++) {
      var index = params[x];
      if(index) {
            checkedParams.push(index);
      }
} 

Agora ao exemplo bem mais elegante: 

var params = form.serializeArray(); 
params = jQuery.map(params, function(value, index){
      return (value) ? value : null;
}); 

Sim, mas qual a diferença entre o $.map() e o $.each()

O each() serve apenas para varrer o objeto ou array, enquanto o map permite um retorno e manipulação do que foi varrido. 

$.map()

$.map([1,2,3,4,5], function(value, index){
      return false;
}); 

// Resultado:
// [false, false, false, false, false] 

$.each()

$.each([1,2,3,4,5], function(index, value){
      console.log(index);
      return false;
}); 

// Resultado:
// 1

// Ele irá imprimir apenas o primeiro valor e irá encerrar
// o laço por causa do return false. 

Espero que tenham entendido mais um pouco sobre o novo método. Caso ainda tenha alguma dúvida, pergunta aí embaixo :)


, , , ,

Comentários

Deixe seu Comentário