Hola, quiero recibir alertas "lkb_1" y "lkb_2", pero este código me da "product_1_name" y "product_1_name";
Las funciones eval y window Puedo deshacerme de ellas, pero creo que no se recomiendan para hacer eso... entonces, ¿hay alguna otra solución en lugar de las funciones eval y window?
<script> product_1_name = "lkb_1"; product_1_pcs = 3; product_2_name = "lkb_2"; product_2_pcs = 5; profil_ismi = ""; const profil_listesi = ["product_1", "product_2"]; i = 0; while (i < profil_listesi.length) { profil_ismi = profil_listesi[i] + "_name"; alert(profil_ismi); i = i + 1; } </script>
Para evitar el uso de eval, puede hacerlo.
La cosa funcionaría bien si envuelve los nombres de los productos en una matriz. luego puede crear dinámicamente el nombre de la variable y, por lo tanto, recuperar específicamente el valor en la matriz.
arr = [] arr['product_1_name'] = "lkb_1" ; product_1_pcs = 3 ; arr['product_2_name'] = "lkb_2" ; product_2_pcs = 5 ; profil_ismi = "" ; const profil_listesi = ["product_1","product_2"]; let i=0; while (i<profil_listesi.length) { let _name = profil_listesi[i] + '_name' profil_ismi = arr[_name]; alert (profil_ismi) ; i=i+1; }
Puede usar eval
en este caso. Es seguro, porque es evidente que no se puede utilizar indebidamente para la inyección de código en este caso particular.
Aún así, creo que sería mejor (más escalable, más preparado para el futuro) tener una variedad de productos, de la siguiente manera:
var products = [ { id: 'product_1', name: 'lkb_1', pcs: '3'}, { id: 'product_2', name: 'lkb_2', pcs: '5'} ]; const profil_listesi = ["product_1", "product_2"]; i = 0; while (i < profil_listesi.length) { profil_ismi = products.find(p => p.id === profil_listesi[i]) alert(profil_ismi.name); i = i + 1; }