Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

120
Visualizações
registro de elemento de matriz por índice que devuelve indefinido

Estaba haciendo un programa que registraba cada pulsación de tecla y lo empujaba a una matriz y funciona bien. El problema es que cuando intento acceder al primer elemento de la matriz y registrarlo, se imprime sin definir. Pero toda la matriz registra bien. ¿Por qué se imprime sin definir? He agregado tanto el registro de la consola de la matriz como el elemento de la matriz en mi código y he comentado además de ellos para indicar. Cualquier ayuda es apreciada. Gracias por adelantado.

EDITAR: resulta que lo que no funciona es acceder al último elemento. He actualizado el código de arriba

 var cacheW = [] var cacheA = [] var cacheD = [] var cacheS = [] // (B1) CAPTURE KEY STROKES window.addEventListener("keydown", function(evt) { if (evt.key == "w") { cacheW.push('w'); //console.log("this: " + evt.key) } else if (evt.key == "a") { cacheA.push('a'); //console.log("this: " + evt.key) } else if (evt.key == "d") { cacheD.push('d'); //console.log("this: " + evt.key) } else if (evt.key == "s") { cacheS.push('s'); //console.log("this: " + evt.key) } }); window.addEventListener("keyup", function(evt) { if (evt.key == "w") { cacheW.push("!w"); //console.log("this: " + evt.key + " removed") } else if (evt.key == "a") { cacheA.push("!a"); //console.log("this: " + evt.key + " removed") } else if (evt.key == "d") { cacheD.push("!d"); //console.log("this: " + evt.key + " removed") } else if (evt.key == "s") { cacheS.push("!s"); //console.log("this: " + evt.key + " removed") } }); //works setInterval(function() { console.log(cacheW) //logs an array }, 50) //doesn't work setInterval(function() { console.log(cacheW[-1]) //logs undefined, should have logged the last element }, 50)

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Javascript accede a los elementos de la matriz por su índice. -1 es un índice no válido. Para acceder al último elemento, use arr[arr.length - 1] .

Otros lenguajes, como python, ofrecen azúcar sintáctico para acceder a elementos desde el final de una matriz. JavaScript no tiene tal azúcar sintáctico. Lo más cercano que puede obtener es escribir arr.slice(-1)[0] , pero esto creará una matriz temporal de un solo elemento y luego accederá al primer elemento de esta matriz.

De hecho, -1 es una propiedad , no un índice válido. Los nombres de las propiedades primero se clasifican en cadenas y luego se agregan al objeto (cada matriz es un objeto):

 a = []; a[-1] = 42; console.log(a); // [], array itself is still empty console.log(a[-1]); // 42, property -1 on the object has value assigned console.log(a['-1']); // 42, object property keys are always converted to string first
about 4 years ago · Juan Pablo Isaza Relatório

0

En lugar de esto:

 //doesn't work setInterval(function() { console.log(cacheW[0])//logs undefined, should have logged the first element }, 50)

Este:

 setInterval(function() { if (cacheW.length > 0) { console.log(cacheW[0]); } else { console.log("<empty>"); } }, 50);

Actualizar Si desea imprimir el último elemento:

 setInterval(function() { if (cacheW.length > 0) { console.log(cacheW[cacheW.length-1]); } else { console.log("<empty>"); } }, 50);
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda