Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
¿Cómo puedo deshacerme del error - TypeError: no se puede leer la propiedad '8' de undefined

La declaración while sigue arrojando un error (TypeError: no se puede leer la propiedad '8' de undefined), sin embargo, console.log aún genera el resultado que debe.

 var hold = []; for (let i = 0; i < (clothes.length - 1); i++) { let count = 0; if (hold.length === 0) { hold.push(clothes[i]); } else { console.log(clothes[i][8], hold[count][8]); while (clothes[i][8] < hold[count][8]) { count++; } hold.slice(count, 0, clothes[i]); } }
about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

Esta parte del código incrementa el count más allá de la duración de la hold[]

 while (clothes[i][8] < hold[count][8]){ count ++; };

paso a paso manualmente:

  • ropa[0] se agrega como espera[0] por la cláusula "si la espera está vacía"
  • clothes[1] se compara con hold[0] y es < entonces count++
  • clothes[1] se compara con hold[1], pero no hay hold[1], por lo que aparece el error

Añadir una cláusula en el while

 while (count < hold.length && clothes[i][8] < hold[count][8]){ count ++; };

Tenga en cuenta que la verificación de longitud debe ser la primera, de lo contrario, obtendrá el mismo error (hay otras formas, como break el while ). La segunda parte de && solo se valora si la primera parte es true .


Tiene otros problemas para detener una solución completa:

 for (let i = 0; i < (clothes.length - 1); i++){

se desplazará a la longitud-1, por lo que si tiene 3 elementos, solo obtendrá dos. Necesitas usar cualquiera

  • i<clothes.length
  • i<=(clothese.length-1)

y

 hold.slice(count, 0, clothes[i]);

no es la sintaxis para .slice y slice devuelve una nueva matriz, no cambia la matriz en su lugar. Esto debería ser

 hold.splice(count, 0, clothes[i]);

Dando un fragmento actualizado:

 var clothes = [[2],[1],[3]]; var hold = [] for (let i = 0; i < clothes.length; i++) { var count = 0; if (hold.length === 0) { hold.push(clothes[i]); } else { while (count<hold.length && clothes[i][0] < hold[count][0]) { count++; }; if (count == hold.length) { hold.push(clothes[i]) } else { hold.splice(count, 0, clothes[i]); } } } console.log(hold.join(","));

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!