3
respostas

Porque usar .includes() ao inves de ==

O codigo seguinte não funciona para achar chaves em arrays.

const estudantes = require('./estudantes.json');

function buscaInformacao(lista, chave, valor) {
    return lista.find((estudante) => estudante[chave] === valor);
}

const estudanteEncontrado = buscaInformacao(estudantes, 'nome', 'Juliet')
console.log(estudanteEncontrado)

const telefoneEstudante = buscaInformacao(estudantes, 'telefone', '1198123183')
console.log(telefoneEstudante)

Para isso foi feita a segunte alteração na função

function buscaInformacao(lista, chave, valor) {
    return lista.find((estudante) => estudante[chave].includes(valor));
}

A duvida é: Porque foi usado o .includes() e não simplesmente tirou um '=' do codigo?

3 respostas

Bom dia, Weslley!

A mudança para o uso de .includes() no lugar de === foi feita porque o operador === faz uma comparação estrita, ou seja, ele só retorna true se o valor for exatamente igual ao que está sendo procurado (mesmo tipo e mesmo conteúdo).

Já o .includes() permite verificar se um valor está presente dentro de outro (como uma substring dentro de uma string ou um elemento dentro de um array). Isso é útil quando você quer encontrar algo que "contém" o valor que está sendo procurado, em vez de exigir uma correspondência exata.

Por exemplo, se o campo do telefone armazenar um número completo com código de área e você procurar por parte dele, o .includes() vai retornar true, enquanto o === exigiria que os dois fossem exatamente iguais.

Acho que eu não formulei muito bem a pergunta. Gostaria de saber porque o codigo com '==' não funcionaria

function buscaInformacao(lista, chave, valor) {
    return lista.find((estudante) => estudante[chave] == valor);
}

Na verdade, o == também funcionaria, mas ele só faz a comparação entre os valores, e, nesse caso, ele tenta converter os tipos antes de comparar (coerção de tipo). Isso quer dizer que, mesmo se os tipos forem diferentes (por exemplo, uma string e um número), ele pode considerar os valores "iguais" após essa conversão.

Porém, isso pode não ser ideal em alguns casos. Se você estiver comparando strings, por exemplo, pode haver variações, como espaços extras ou letras maiúsculas e minúsculas que o == não vai considerar corretamente. Para esses casos, o .includes() pode ser mais adequado, porque ele permite procurar por parte de um valor, sem exigir uma correspondência exata.

Então, se você está procurando uma correspondência exata e não precisa se preocupar com conversão de tipos, o == pode ser usado. Mas se estiver lidando com algo mais flexível, como procurar uma substring ou parte de um valor, o .includes() é a melhor opção.

Espero que isso ajude a esclarecer!