Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Problemas Filtrando array em javascript

Estou desenvolvendo uma pequena aplicação em React que pega um array de um json e deve filtrar as noticias desta array.

Tenho uma função onde recebo uma array e uso o filter() para criar uma nova array.

Quando faço o filtro por equivalencia ( === ) o filtro funciona

Ex:

filterArticles(){
    const articles = this.state.articles; // array original
    let search = this.state.search;  // valor para efetuar o filtro
    //starting filter
    let filtered =  articles.filter(function (a) {
      return (a.author === search);
    });
  }

Mas quero o retorno seja verdadeiro mesmo quando o valor do search, isso é, o nome do autor, não esteja escrito por inteiro, tentei o seguinte código:

filterArticles(){
    const articles = this.state.articles; // array original
    let search = this.state.search;  // valor para efetuar o filtro
    //starting filter
    let filtered =  articles.filter(function (a) {
      return (a.author.includes(search));
    });
  }

E não funcionou.

Alguma ideia do que pode estar acontecendo?

8 respostas

Fala aí Leandro, beleza? Acho que nesse caso poderia utilizar o problema está no seu .includes, tente fazer assim:

// códigos omitido
return a.includes(search)

Se não der certo, precisa verificar o que seria seu array, se ele é de String ou JSON.

Espero ter ajudado.

Fala Matheus, obrigado cara.

Não funcionou e provavelmente é por se tratar de um json.

Por isso estava tentando referenciar o a (a.author)

Este é o link aa API do json, estou carregando a array de dentro do articles :[{}] e incluindo em this.state.articles

https://newsapi.org/v2/top-headlines?country=us&apiKey=c37ce183e01746c095b37b25178395be

Legal, para resolver o filtro, faz assim então:

return a.author.includes(search)

Pois você está iterando sobre cada item do array, que no caso é um JSON, dai precisa verificar o atributo author e ver se dá match com o search

Espero ter ajudado.

Fala, Matheus.

Foi assim que eu tentei da primeira vez.

O erro é: Cannot read property 'includes' of null

O que acho estranho é que se eu faço

return (a.author === search);

funciona, mas se eu faço

 return (a.author.includes(search));

Dá este erro.

Pode ser algo relacionado ao React mas honestamente, não faço ideia do que pode estar acontecendo.

Verdade, falha minha, sorry.

Esse erro dá porque tem algum author com o atributo null, faz assim:

 return a.author && (a.author.includes(search));

Espero ter ajudado.

Cara, ajudou e ajudou muito.

Se não for abusar da sua boa vontade, vc poderia explicar o porquê do 'a.author &&' .

Acho que não peguei a lógica aê.

solução!

Opa, com certeza.

A ideia é verificar se dentro de a existe o author, se já der false ele nem vai para a próxima etapa que seria o .includes, porém, se der true, ele vai para o próximo passo e faz o .includes.

Espero ter ajudado.

Perfeito.

Muito obrigado!