Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA
LiçãoIniciantecódigo testado

Vetor e matriz: listas e tabelas dentro do programa

Índice começando em zero, percorrer com laço, buscar um valor e subir para a matriz de duas dimensões com laço aninhado, com saída real no Node.

Rodolfo Mori4 min de leitura

Vetor organiza vários valores numa sequência acessada por índice; matriz organiza valores por linha e coluna, normalmente como um vetor de vetores. Essas estruturas permitem repetir a mesma regra para uma coleção em vez de criar uma variável por item.

O domínio é um boletim com quatro alunos e três notas. Primeiro vamos dominar uma linha, depois percorrer as doze células da tabela. O laço de repetição fornece o mecanismo; vetor fornece os dados que mudam em cada volta.

Uma variável pode apontar para muitos valores

Sem vetor, três notas viram três nomes e três operações. Com Array, a coleção tem uma identidade e uma quantidade observável:

js
const notas = [8, 7.5, 9];

console.log(notas);
console.log(notas.length);
[ 8, 7.5, 9 ] 3

Pense numa estante numerada: cada posição guarda um item e a ordem é parte da informação. O limite é que um array JavaScript pode ter lacunas, misturar tipos e mudar de tamanho; uma estante física não explica essas regras.

Uma coleção deve representar itens do mesmo papel, mesmo que a linguagem permita misturar. [8, 'ausente', true] obriga todo cálculo a descobrir o significado de cada tipo. Para boletim, mantenha números e represente ausência por uma decisão explícita no modelo.

O índice começa em zero

O primeiro item está no índice zero e o último está em length - 1:

js
const notas = [8, 7.5, 9];

console.log('primeira', notas[0]);
console.log('segunda', notas[1]);
console.log('última', notas[notas.length - 1]);
primeira 8 segunda 7.5 última 9

Índice é deslocamento a partir do começo. O primeiro valor está a zero passos do início; por isso recebe zero. Quantidade e último índice são números diferentes: três itens terminam no índice dois.

Escreva essa relação no papel sempre que um limite confundir: índices válidos vão de zero, inclusive, até comprimento, exclusivo. É a mesma forma de um laço i < length.

Percorrer por índice mostra posição e valor

Quando a posição participa da regra, use um laço indexado:

js
const notas = [8, 7.5, 9];

for (let indice = 0; indice < notas.length; indice += 1) {
  console.log(`índice ${indice}: ${notas[indice]}`);
}
índice 0: 8 índice 1: 7.5 índice 2: 9

A condição usa menor estrito. Quando indice chega a três, a avaliação é falsa e o corpo não tenta ler uma quarta nota. Trocar por menor ou igual executaria uma volta extra.

Se você precisa apenas dos valores, for...of comunica melhor a intenção:

js
const notas = [8, 7.5, 9];
let soma = 0;

for (const nota of notas) soma += nota;
console.log(soma);
24.5

Não confunda for...of, que entrega valores, com for...in, que enumera chaves. Para arrays, prefira índice tradicional quando precisa da posição e for...of quando precisa do conteúdo.

Buscar é percorrer até encontrar ou terminar

Uma busca manual guarda o índice e para quando encontra:

js
const alunos = ['Ana', 'Bruno', 'Carla', 'Diego'];
let indiceEncontrado = -1;

for (let indice = 0; indice < alunos.length; indice += 1) {
  if (alunos[indice] === 'Carla') {
    indiceEncontrado = indice;
    break;
  }
}

console.log(indiceEncontrado);
2

-1 representa “não encontrado” porque nenhum índice válido é negativo. A operação pronta findIndex usa o mesmo contrato. O laço manual ensina condição de parada; o método pronto reduz ruído quando a equipe já conhece callback.

Teste também o ausente. Sem esse caso, você não sabe se o algoritmo distingue primeiro item e nenhum item:

js
const alunos = ['Ana', 'Bruno', 'Carla'];
console.log(alunos.findIndex((nome) => nome === 'Ana'));
console.log(alunos.findIndex((nome) => nome === 'Eva'));
0 -1

Não use if (indice) para conferir resultado: índice zero vira falso e -1 vira verdadeiro. Compare explicitamente com -1.

Índice fora do intervalo devolve undefined

Uma leitura fora da coleção não lança erro imediatamente:

js
const notas = [8, 7.5, 9];
console.log(notas[3]);
undefined

O defeito costuma aparecer duas linhas depois, quando o programa tenta usar o valor como número:

js
const notas = [8, 7.5, 9];

try {
  console.log(notas[3].toFixed(1));
} catch (erro) {
  console.log(`${erro.name}: ${erro.message}`);
}
TypeError: Cannot read properties of undefined (reading 'toFixed')

A mensagem aponta undefined, mas a causa é o índice inválido. Volte à linha que escolheu a posição e confira o limite. Um teste de mesa revela a volta extra antes da chamada de toFixed.

Matriz adiciona linha e coluna

Uma matriz de quatro alunos por três avaliações pode ser um array de arrays:

js
const boletim = [
  [8, 7, 9],
  [6, 8, 7],
  [9, 9, 10],
  [5, 6, 7],
];

console.log(boletim[0][2]);
console.log(boletim[3][1]);
9 6

O primeiro índice escolhe a linha; o segundo escolhe a coluna dentro dela. Nomeie mentalmente boletim[linha][coluna]. Inverter os índices pode devolver outro valor válido, o que torna o bug silencioso.

Antes de percorrer, verifique se todas as linhas têm três colunas. Uma matriz irregular exige outra regra; não finja que células ausentes são notas.

Laço dentro de laço percorre doze células

Enquanto a coluna percorre uma linha inteira, a linha externa fica parada. Depois a externa avança e a coluna recomeça em zero:

js
const boletim = [
  [8, 7, 9],
  [6, 8, 7],
  [9, 9, 10],
  [5, 6, 7],
];

let voltas = 0;
for (let linha = 0; linha < boletim.length; linha += 1) {
  for (let coluna = 0; coluna < boletim[linha].length; coluna += 1) {
    voltas += 1;
    console.log(linha, coluna, boletim[linha][coluna]);
  }
}
console.log('voltas', voltas);
0 0 8 0 1 7 0 2 9 1 0 6 1 1 8 1 2 7 2 0 9 2 1 9 2 2 10 3 0 5 3 1 6 3 2 7 voltas 12

Quatro linhas vezes três colunas produzem doze voltas. Essa multiplicação antecipa o custo de laços aninhados, assunto da complexidade de algoritmo.

Missão: somar uma coluna do boletim

Some a terceira avaliação de todos os alunos. O critério é obter 33 e executar quatro voltas, sem somar as outras colunas:

js
const boletim = [[8, 7, 9], [6, 8, 7], [9, 9, 10], [5, 6, 7]];
let soma = 0;
for (const notasDoAluno of boletim) soma += notasDoAluno[2];

console.log(soma);
33

Revise a forma da matriz antes de calcular. Cada linha deve representar o mesmo papel e ter as colunas esperadas; uma linha curta transforma a leitura seguinte em undefined. Valide a estrutura na fronteira e só então deixe o laço assumir o contrato retangular.

Quando linha e coluna têm significado, considere objetos para nomear e arrays para ordenar. Uma lista de alunos com propriedade notas pode comunicar melhor que decorar que coluna zero é prova, coluna um é trabalho e coluna dois é projeto. Matriz continua útil para operações tabulares, desde que o mapa das colunas esteja explícito.

Depois escreva uma função que recebe o índice da coluna, revise acumulador e média, consulte o guia de lógica e siga pela trilha.

  • vetor
  • matriz
  • indice
  • laco aninhado
  • busca

Perguntas frequentes

Vetor e array significam a mesma coisa em JavaScript?
No ensino de lógica, vetor costuma significar uma coleção linear. Em JavaScript a estrutura concreta é Array, que pode misturar tipos e crescer dinamicamente.
JavaScript possui uma matriz nativa separada de Array?
Não. Uma matriz costuma ser representada por um array cujos elementos também são arrays. O programa precisa manter o mesmo número de colunas quando a forma retangular importa.

Dúvidas e comentários

Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.

Todo o código deste artigo foi executado em Node v26.3.0, e as saídas exibidas são as reais — como produzimos este conteúdo.

Fontes consultadas

  1. ECMAScript — Array Objects — tc39.es
  2. ECMAScript — Array.prototype.findIndex — tc39.es

Continue por aqui