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

[Dúvida] Alguem explica pq da erro TypeError: Cannot read properties of undefined (reading 'patente')

const soldados = [{ nome: "John", patente: "sd", numero: 1, status: false }, { nome: "martins", patente: "sd", numero: 2, status: false }, { nome: "junior", patente: "sd", numero: 3, status: false }, { nome: "santos", patente: "sd", numero: 4, status: true }, { nome: "leonardo", patente: "sd", numero: 5, status: true }, { nome: "cleiton", patente: "sd", numero: 6, status: true }, { nome: "oliveira", patente: "sd", numero: 7, status: true }, { nome: "almeida", patente: "sd", numero: 8, status: true }, { nome: "rocha", patente: "sd", numero: 9, status: true }, { nome: "ferreira", patente: "sd", numero: 10, status: true }];

const militares = [...soldados];

for (i = 0; i <= militares.length; i++) { if (militares[i].patente === "sd" && militares[i].status === true) { escalados.push(militares[i]); militares[i].status = false; } } }

1 resposta
solução!

Olá!

O erro "TypeError: Cannot read properties of undefined (reading 'patente')" está ocorrendo porque você está tentando acessar a propriedade 'patente' de um elemento do array 'militares' que não existe. Isso ocorre porque você está utilizando o operador de comparação '<=' no loop for, o que faz com que o loop tente acessar um elemento além do tamanho do array.

Para corrigir esse erro, você deve alterar a condição do seu loop for para 'i < militares.length', de modo que ele percorra somente até o último elemento do array.

Aqui está o trecho de código corrigido:

const soldados = [{ nome: "John", patente: "sd", numero: 1, status: false }, { nome: "martins", patente: "sd", numero: 2, status: false }, { nome: "junior", patente: "sd", numero: 3, status: false }, { nome: "santos", patente: "sd", numero: 4, status: true }, { nome: "leonardo", patente: "sd", numero: 5, status: true }, { nome: "cleiton", patente: "sd", numero: 6, status: true }, { nome: "oliveira", patente: "sd", numero: 7, status: true }, { nome: "almeida", patente: "sd", numero: 8, status: true }, { nome: "rocha", patente: "sd", numero: 9, status: true }, { nome: "ferreira", patente: "sd", numero: 10, status: true }];

const militares = [...soldados];
const escalados = [];

for (let i = 0; i < militares.length; i++) { 
    if (militares[i].patente === "sd" && militares[i].status === true) { 
        escalados.push(militares[i]); 
        militares[i].status = false; 
    } 
}

Com essa correção, o loop irá percorrer corretamente todos os elementos do array 'militares' e evitará o erro de tentar acessar propriedades de elementos indefinidos.

Espero que esta explicação tenha sido útil! Se tiver mais alguma dúvida, não hesite em perguntar.