JavaScript - Uncaught TypeError: Cannot read property 'length' of undefined

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 56 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por leonardo (4 intervenciones) el 05/03/2019 15:39:52
Estoy intentando hacer un programa que tome todos los strings de un array y diga cual es mayor, pero en el segundo bucle for del codigo me aparece el error del titulo, que pienso esta relacionado con el a[i] o el a[i+1] que hay aparece.¿Como hago para evitar el error y hacer que el programa corra?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var valores = [true, 5, false, "hola", "adios", 2,7,90,"hola otra vez"],a=[];
  var mayor;
 
  for(let i in valores){
    if(typeof valores[i]=="string"){
      a.push(valores[i]);
    }
  }
  for(let i in a){
    if(a[i].length>a[i+1].length){
      mayor=a[i];
    }else{
      mayor=a[i+1];
    }
  document.write(mayor);
  }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 183
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por Yamil Bracho (78 intervenciones) el 05/03/2019 16:01:14
Necesitas inicializar y crear el arreglo a. Por ejemplo :

1
2
3
4
5
6
7
8
9
a = []; // o a = new Array()
  for(let i in valores){
    if(typeof valores[i]=="string"){
      a.push(valores[i]);
    }
  }
 
  for(let i in a){
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.506
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por joel (895 intervenciones) el 05/03/2019 16:45:57
Hola Yamil, esta inicializado al final de la primera linea... a mi también me ha costado de verlo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de joel
Val: 3.506
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por joel (895 intervenciones) el 05/03/2019 16:45:16
En tu código tienes dos problemas...
1.- la variable i en la linea 9 es una cadena... por lo que al hacer i+1 lo que te queda es "01" en vez de "1"
La solución puede ser utilizar parseInt:
1
...a[parseInt(i)+1].length....

2.- haces un bucle por todos los elementos de a, por lo que cuando estés en el ultimo elemento, te dará error parseInt(i)+1, ya que harás referencia a un elemento que no existe en el array.
Según entiendo, quieres obtener el elemento mas largo verdad? yo lo haría así:
1
2
3
4
5
6
7
var mayor=0;
for(let i in a){
    if(a[i].length>mayor){
      mayor=a[i];
    }
}
document.write(mayor);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 183
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por Yamil Bracho (78 intervenciones) el 05/03/2019 16:57:27
Wow, si, no habia visto la inicializacion... :-)
Mas facil aun seria

1
2
3
4
5
6
var valores = [true, 5, false, "hola", "adios", 2,7,90,"hola otra vez"], len = valores.length, mayor = -1;
while (len--) {
if ((typeof valores[len]=="string") && valores[len].length > mayor) {
  mayor = valores[len].length;
}
document.write(mayor);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de joel
Val: 3.506
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por joel (895 intervenciones) el 05/03/2019 18:13:05
Perfecto Yamil!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha disminuido su posición en 56 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Uncaught TypeError: Cannot read property 'length' of undefined

Publicado por leonardo (4 intervenciones) el 05/03/2019 17:38:44
podrias explicarme porque la variable i en la linea 9 es una cadena? por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar