Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Estou com uma dúvida sobre o método filter

var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

/**
 * Array filters items based on search criteria (query)
 */
function filterItems(query) {
  return fruits.filter(function(el) {
      return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
  })
}

console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']

Estudando um pouco sobre esse método, eu me deparei com o seguinte código que está localizado no MDN voltado para JS. Primeiramente nós temos o seguinte array com algumas frutas. Logo abaixo, o código mostra uma função que nos permitirá passar certos valores em string e posteriormente serão filtrados. O que me confundiu foi o segundo return, que me diz que irá retornar o parâmetro el em minúsculo e através dele eu já acesso o método indexOf, o qual me permite localizar valores em um array. Não entendi muito bem pq isso deve ser maior que -1 e quando eu tiro o -1, o código me retorna todos os valores exceto o desejado.

cars = ['bmw', 'polo', 'palio', 'siena', 'camaro']

function search(nameQuery) {
    return cars.filter(function(item) {
        return item.toLowerCase().indexOf(nameQuery.toLowerCase());
    })
}

console.log(search('bm'));

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAo meu ver, o valor retornado da minha função indexOf deve ser maior que -1, pois o -1 é um índice inexistente nos elementos do meu array, mas eu não entendi pq não funciona sem essa questão de ser maior do que ele. Agradeço se alguém puder me ajudar!

1 resposta
solução!

A função filter deve receber como parâmetro uma outra função que retorna um valor booleano. Se o retorno for true, o item é removido do array.

Quando o retorno da função indexOf é igual a -1, significa que nenhum elemento que tenha as características que você procura foi encontrado. O que essa comparação faz é verificar se um elemento foi encontrado e retornar um valor booleano pra função filter poder remover ou não o elemento do array.

Espero ter ajudado!