Jump to content

jQuery - Filtrar array com combinações


tevez15
 Share

Recommended Posts

Bom dia caros amigos,

Trago uma dúvida que talvez me possam ajudar. Tenho um limite de entrega de um projecto muito apertada, e o meu problema neste momento, é que tenho uma lista de uma API em JSON, e preciso de a filtrar.

Neste momento tenho 9 filtros, e da maneira como estou a fazer tenho de fazer á mão combinações entre eles, o que para além de consumir muito tempo, não é muito dinâmico e o código fica enorme.

O que tenho neste momento é algum semelhante com isto:

var searchReturn = $.grep(myFlights, function(myFlights) {
//if's "infinitos", com todas as possibilidades que possam existir entre os 9 filtros, deste individual, a passar por combinações de 2,3.....
});

Sabem de uma outra forma que me possa ajudar a tornar tudo isto mais dinamico? obrigado.

Edited by apocsantos
geshi
Link to comment
Share on other sites

O array que vem da API dá me valores como por exemplo, cidade de partida, cidade de origem, preço, tempo de voo, etc etc.

Tenho filtros por preço, tempo de voo, hora de partida e de chegada... é o que estou a usar.

PS: ALterei o meu codigo, neste momento o que estou a fazer, é criar um array dos filtros da pesquisa (nome e valor) e cruzar com o array dos resultados da API.

Penso que desta forma fique mais dinamico.

PS2: Para concluir o topico, ja consegui fazer o que procurava, fica um exemplo:

predicates = [
      function checkAirline(PRODUCT)
      {
           if( typeof airline != "undefined"){
           return PRODUCT.COLOR == COLOR; 
       }else{
       return true; //Pode variar, neste meu caso é exatamente o que preciso
       }
      },
      function checkPrice(PRODUCT)
      {
          if( typeof stops != "undefined"){
           return PRODUCT.COLOR <=  COLOR; 
       }else{
       return true; //Pode variar, neste meu caso é exatamente o que preciso
       }
      },
  ],
  filteredProducts;

  filteredProducts = $.grep(PRODUCT, function (element, index)
  {
      for (var i=0; i<predicates.length; i++)
      {
          if (!predicates[i](element)) return false;
      }

      return true;
  });
Edited by tevez15
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.