Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

121
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda