Pesquisa em arrays
stamps guarda oak, depois elm e outra vez oak, e a gaveta fica do mesmo tamanho nesta página porque procuras um valor em vez de visitares cada casa.
Pergunta o selo
Na página anterior o forEach visitou cada canção e a própria chamada voltou undefined. Aqui dizes o nome de um selo, e a gaveta nem cresce nem encolhe.
Quatro formas de resposta
Antes de leres um número, esclarece que forma de resposta precisas. Depois escolhes o método segundo essa forma.
📊 O que cada pesquisa devolve
| Método | A pergunta | O que volta | Se não estiver |
|---|---|---|---|
indexOf |
casa do primeiro acerto | um índice | -1 |
lastIndexOf |
casa do último acerto | um índice | -1 |
includes |
o valor está guardado | true ou false |
false |
find |
peça cujo teste se cumpre | a própria peça | undefined |
Os números de casa vêm de indexOf e de lastIndexOf, enquanto includes e find não te entregam uma casa.
Selo da frente
Pergunta em que casa se senta o primeiro oak. Espera o número 0.
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("oak");
console.log(slot);
O registo mostra 0, e o oak de trás fica de fora deste resultado.
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("pine");
console.log(slot);
console.log(stamps.length);
pine nunca foi guardado e o registo mostra -1. O comprimento continua 3, por isso não encontrar não é apagar um selo.
let stamps = ["oak", "elm", "oak"];
let slot = stamps.lastIndexOf("oak");
console.log(slot);
O registo mostra 2, ou seja o oak no fundo da gaveta e não o selo da frente.
let stamps = ["oak", "elm", "oak"];
console.log(stamps.includes("elm"));
console.log(stamps.includes("pine"));
Para elm sai true. Para pine sai false. Esse false não é -1.
let stamps = ["oak", "elm", "oak"];
let hit = stamps.find(function (name) {
return name === "elm";
});
console.log(hit);
let miss = stamps.find(function (name) {
return name === "pine";
});
console.log(miss);
A primeira linha é o texto elm e a segunda é undefined. Um teste que nenhum selo passa não é um número de casa.
Escreve a casa
Converte a casa do primeiro oak em texto, e se a pesquisa valer -1 mostra a palavra missing no parágrafo.
<!DOCTYPE html>
<html>
<head>
<title>array-search — page</title>
</head>
<body>
<p id="slot">…</p>
<script>
let stamps = ["oak", "elm", "oak"];
let slot = stamps.indexOf("oak");
let line = "missing";
if (slot !== -1) {
line = String(slot);
}
let box = document.getElementById("slot");
box.textContent = line;
</script>
</body>
</html>
O parágrafo mostra 0. Muda a pesquisa para pine e recarrega a página. Aí vês a palavra missing.
Procura tu
Faz estas seis verificações na mesma gaveta.
- Regista a casa do primeiro oak e espera 0
- Regista a pesquisa de pine e espera -1 enquanto o comprimento fica 3
- Regista a casa do último oak e espera 2
- Regista à parte se elm está e se pine está
- Acha elm com find, acha pine também e põe o texto ao lado de undefined
- Lê o parágrafo, procura pine e recarrega
Fácil de misturar
Não juntes estes seis casos.
- Não trates -1 como uma casa que se pode ler
- Não leias true ou false como se fossem um índice
- Não esperes que find devolva 1 para elm
- Não recorras a forEach quando só queres um sim ou um não
- Não contes outro tipo ou outra maiúscula como acerto
- Não meças o sucesso com if (slot), porque 0 é um acerto real
O que levas
Guarda estas diferenças separadas.
- O primeiro acerto ou -1 vem de indexOf
- O último acerto ou -1 vem de lastIndexOf
- O sim ou não vem de includes
- O próprio selo ou undefined vem de find
- Não encontrar deixa o comprimento quieto
- A página seguinte é a das datas
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo