Al compilar mi código me sale un error de
TypeError: no se puede leer la propiedad '0' de indefinido
Entiendo que el error esencialmente significa que el código está tratando de extraer un elemento de matriz que no existe. Esto suele suceder porque hay un incremento de bucle for sin ningún límite para terminar. Sin embargo, across++ tiene un límite de for(let across=0; across<matrix[0].length; across++){ Me gustaría saber qué está causando el mensaje de error.
Contexto/Tarea:
Después de hacerse famosos, los CodeBots decidieron mudarse juntos a un nuevo edificio. Cada una de las habitaciones tiene un costo diferente, y algunas de ellas son gratuitas, ¡pero corre el rumor de que todas las habitaciones gratuitas están embrujadas! Dado que los CodeBots son bastante supersticiosos, se niegan a quedarse en ninguna de las habitaciones libres, o en cualquiera de las habitaciones debajo de cualquiera de las habitaciones libres. Dada la matriz, una matriz rectangular de números enteros, donde cada valor representa el costo de la habitación, su tarea es devolver la suma total de todas las habitaciones que son adecuadas para los CodeBots (es decir, sume todos los valores que no aparecen a continuación un 0). Ejemplo: matriz =
[[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]]la salida debe ser solución (matriz) = 9.
function solution(matrix) { let count = 0; for(let across=0; across<matrix[0].length; across++){ for(let down=0; down<matrix.length; down++){ if(matrix[across][down] == 0){ across++; }else{ count += matrix[across][down]; } } } return count; } //[ [1, 1, 1, 0], [0, 5, 0, 1], [2, 1, 3, 10] ] // 0 1 2Para resumir, ha transpuesto accidentalmente una fila y una columna en su acceso a la matriz. Cambie los diversos códigos de acceso a la matriz a:
matrix[down][across] Notas sobre la depuración de esto: el mensaje de error sugirió que donde usa matrix[across][down] , debe haber sido el caso que matrix[across] tenía un valor undefined y down tenía el valor 0 . Eso es lo que causó el error:
TypeError: no se puede leer la propiedad '0' de indefinido
Y eso sucedió porque across estaba fuera de alcance. JavaScript no verifica el rango y simplemente produce undefined en ese caso. Si su matriz tuviera 3 filas y 3 columnas, no habría visto el error (aunque habría estado allí, esperando fallar en el futuro).