Nom dynamic des variables javascript

J’ai besoin de créer dynamicment des variables dans une boucle, mais je ne sais pas comment. J’ai lu sur l’utilisation de eval(); mais tout ce que j’ai trouvé, c’est qu’il s’agit de changer dynamicment la valeur à l’intérieur de la variable.

J’ai besoin de quelque chose comme ça:

 $(e).find('unidadeid').each(function () { countUnidades++; var Unidade[value inside countUnidades here] = $(this).text(); }); 

Soyez clair sur vos pas, s’il vous plaît. Je ne demande pas une solution, mais une aide, un apprentissage. Je vous remercie 😉

Vous avez deux options:

  1. Utilisez un tableau:

     var unidades = []; $(e).find('unidadeid').each(function () { unidades.push($(this).text()); }); 

    ou

     var unidades = $(e).find('unidadeid').map(function () { return $(this).text(); }).get(); 
  2. Si vous voulez vraiment avoir des noms qui ne sont pas que des chiffres, utilisez un object et une notation entre crochets:

     var unidades = {}, countUnidades = 0; $(e).find('unidadeid').each(function () { countUnidades++ unidades['Unidade' + countUnidades] = $(this).text(); }); 

    Cela crée un object, unidades , avec des propriétés telles que Unidade0 , Unidade1 , etc. Notez que each reçoit un index, vous n’avez donc pas besoin de countUnidades sauf si vous le souhaitez pour autre chose:

     var unidades = {}; $(e).find('unidadeid').each(function (index) { unidades['Unidade' + index] = $(this).text(); }); 

Vous pouvez toujours utiliser array:

 var Unidade = [], countUnidades = 0; $(e).find("unidadeid").each(function(i) { Unidade[countUnidades++] = $(this).text(); // ... or Unidade.push($(this).text()); // ... or Unidade[i] = $(this).text(); }); 

N’oubliez pas que les éléments DOM doivent toujours avoir des identifiants uniques . Par conséquent, each itération n’est pas requirejse ici, si unidadeid fait référence à l’identifiant d’un élément.

Votre exemple ajoute simplement à ce que je suppose est un tableau avec des valeurs incrémentielles. Unidade ressemblerait à ceci dans JSON:

 [ 0: "text0", 1: "text1", 2: "text2" ] 

Mais si vous souhaitez append ceci à un object, il vous suffira de parcourir un tableau de chaînes où le tableau a la même longueur que votre liste d’éléments. En fait, vous souhaiterez peut-être attacher cette valeur à un atsortingbut de données où la valeur est le nom de la variable et le texte le contenu de l’élément. Donc, le HTML serait quelque chose comme ça:

 
Text1
Text2
Text3

Aurait besoin de ce JS:

 var unidade = {}; $("div").find('unidadeid').each(function() { unidade[$(this).data('var')] = $(this).text(); }); console.log(unidade); 

Et l’object ressemblerait à ceci:

 { "a": "Text1", "b": "Text2", "c": "Text3" } 

Je doute que vous ayez besoin de créer des variables de manière dynamic. C’est très rarement utile.

Vous voulez probablement en savoir plus sur les structures de données; en particulier je pense que vous voulez juste un tableau:

 var unidades = []; // declare the array outside the loop $(e).find('unidadeid').each(function () { countUnidades++; unidades[countUnidades] = $(this).text(); }); 

Et maintenant vous avez un tableau, unidades dont les valeurs sont les contenus text() de vos éléments.

Je ne sais pas si vous voulez find('unidadeid') – c’est-à-dire trouver tous les éléments , ce qui n’est pas un élément HTML, mais vous peut-être du code XML personnalisé ou un exemple.

Eh bien, juste pour être complet, voici exactement ce que vous avez demandé, bien que ce soit une idée terrible:

 $(e).find('unidadeid').each(function () { countUnidades++; var t = $(this).text(); eval('Unidade' + countUnidades + ' = t;'); }); 

Remarque:

  • eval est difficile à utiliser sans ouvrir des failles de sécurité.
  • eval est lent.
  • La création dynamic de variables est plutôt inutile car vous devez également y accéder de manière dynamic.
  • Les variables sont globales (sinon, elles seraient locales à la fonction de rappel et disparaîtront immédiatement après leur création).

Normalement, vous utiliseriez un tableau à la place:

 var Unidade = []; $(e).find('unidadeid').each(function () { Unidade.push($(this).text()); });