Haluk Aydoğan
Haluk Aydoğan

Reputation: 45

How to get data value with in a loop

Hi I want to get alert "lkb_1" and "lkb_2" , but this code gives me "product_1_name" and "product_1_name" ;

eval and window functions I can get rid of them but I think they are not recommended to do that.. so is there any other solution rather than eval and window functions?

<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>

Upvotes: 1

Views: 1229

Answers (2)

www.admiraalit.nl
www.admiraalit.nl

Reputation: 6089

You can use eval in this case. It is safe, because it is evident that it cannot be misused for code injection in this particular case.

Still, I think it would be better (more scalable, more future proof), to have an array of products, as follows:

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;
}

Upvotes: 1

Maik Lowrey
Maik Lowrey

Reputation: 17556

To avoid using eval you can do that.

The thing would work well if you wrap the product names in an array. then you can dynamically create the variable name and thus specifically retrieve the value in the array.

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;
}

Upvotes: 1

Related Questions