Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 14 Octubre 2021, 21:44 pm



Título: [Pregunta]: Problemas con javascript (eval)
Publicado por: Leguim en 14 Octubre 2021, 21:44 pm
Hola,

estaba tratando de hacer esto:
Código
  1. let string = 'form_x.input_1.value, form_x.input_2.value, form_x.input_3.value, form_x.input_4.value';
  2.  
  3. // si yo hago..
  4. eval([string]); // esto va a crear un arreglo donde solamente agregará el último elemento, es decir el valor del input 4... Los demás no me aparecen.
  5. [code]
[/code]


Título: Re: [Pregunta]: Problemas con javascript (eval)
Publicado por: Danielㅤ en 14 Octubre 2021, 22:39 pm
Hola, eso no funciona así, tenés que usar una matriz para agregar arrays o un array para insertar los strings.

Primero tenés que crear un array vacío, después usar un bucle que recorra los elementos de tu string para ir agregandolos a tu array, por lo que cada ciclo/vuelta que de el bucle, va a ir sumando elementos a tu array/arreglo.

Básicamente tu arreglo/array quedaría así:

Código
  1. arrayInputs
  2. ["form_x.input_1.value", "form_x.input_2.value", "form_x.input_3.value", "form_x.input_4.value"]


Saludos


Título: Re: [Pregunta]: Problemas con javascript (eval)
Publicado por: MinusFour en 14 Octubre 2021, 23:55 pm
Poner el string entre corchetes no hace nada aquí... La función de eval convierte el arreglo a un string de vuelta, por lo que acabas haciendo:

Código
  1. eval('form_x.input_1.value, form_x.input_2.value, form_x.input_3.value, form_x.input_4.value');

Lo cual evalúa al último valor separado por coma (así funciona el operador de la coma en javascript).

Si lo que quieres es convertir el string en un arreglo, la forma más fácil es hacer un split...

Código
  1. let arr = string.split(', ');

Edit:

Me doy cuenta que el arreglo tal cual no es exactamente como lo que quieres. Si esas son variables y propiedades de javascript puedes hacer dos cosas.

Hacer eval de un arreglo en forma de string:

Código
  1. let arr = eval(`[${string}]`);

O hacer eval a cada elemento de la lista:

Código
  1. let arr = string.split(', ').map(eval);

Probablemente sea mejor una llama directa de eval (dependiendo del contexto de las variables).

Código
  1. let arr = string.split(', ').map(e => eval(e));