web-dev-qa-db-fra.com

variable comme index dans un tableau associatif - Javascript

J'essaie de créer un tableau associatif, de créer un tableau vide, puis d'ajouter une paire (indexName -> valeur):

var arrayName = new Array;

arrayName["indexName"] = value;

// i know i can also do the last line like this:

arrayName.indexName = value;

Lorsque j'attribue la valeur à la indexName, je veux que indexName soit dynamique et la valeur d'une variable. Alors j'ai essayé ceci:

arrayName[eval("nume")] = value;

Où:

var var1 = "index";
var var2 = "Name";

var nume = '"' + var1 + var2 + '"'; 

mais: alert(arrayName["indexName"]); ne renvoie pas "valeur" ... il dit "indéfini"

Y a-t-il quelque chose qui me manque? (Je ne connais pas eval()); si j’essaie d’être une impasse, existe-t-il un autre moyen de dynamiser le nom d’index de la valeur du tableau associatif?

24
bogdan

Au début, je ne pense pas que vous ayez besoin d’un vrai objet tableau pour faire ce dont vous avez besoin, vous pouvez utiliser un objet simple.

Vous pouvez simplement utiliser la notation entre crochets pour accéder à une propriété, en utilisant la valeur d'une variable:

var obj = {};
var nume = var1 + var2;
obj[nume] = value;

Les tableaux sont simplement des objets, le concept de "tableau associatif" peut être obtenu en utilisant un objet simple, les objets sont des collections de propriétés qui contiennent des valeurs.

Les véritables tableaux sont utiles lorsque vous devez stocker des index numériques. Ils mettent automatiquement à jour leur propriété length lorsque vous affectez un index ou vous Push une valeur.

22
CMS

utiliser arrayName[var1+var2]

Notez que arrayName.var est identique à arrayName["var"] - ce n'est que du sucre syntaxique. La seconde forme est principalement utilisée pour traiter le type de problèmes auxquels vous êtes confrontés - clés d’objet dynamiques et clés non alphanumériques (pensez à arrayName[".eval()"]; c’est une clé d’objet parfaitement légale qui n’a rien à voir avec la fonction javascript eval() )

5
Gabi Purcaru

Vous utiliseriez des objets pour faire cela:

var hash = {}
hash["foo"] = "foo";
hash.bar    = "bar";
// This is the dynamic approach: Your key is a string:
baz         = "baz"
hash[baz]   = "hello";

Pour itérer, utilisez simplement une boucle for ou $.each() dans jQuery.

5
balu

J'ai fait quelque chose comme aimer suivre;

let parentArray = [];
let childArray = [1, 2, 3];
childArray.name = 'my-array-1';
parentArray.Push(childArray);

Pour accéder à cela par nom dans ES6;

parentArray.filter(x => x.name == 'my-array-1');
0
Mahib

En effet, il n’était pas nécessaire d’obtenir un objet tableau, un objet simple faisait le travail; de plus, un tableau a introduit la nécessité d’utiliser des guillemets entre les crochets obj["var1 + var2"] pour accéder à la valeur de la propriété de l’objet et non à la valeur associée à un index (je pense); les guillemets ont transformé "var1 + var2" en une chaîne. L'utilisation d'un objet simple a éliminé le besoin de guillemets, je peux donc utiliser obj[var1 + var2], ce qui a fonctionné :)

Merci tout le monde !

0
bogdan

Recherchez-vous variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';?

Et même ainsi, vous devriez utiliser un littéral d'objet à la place. x = {}; x[variablename] = 'blah';

0
meder omuraliev

Vous voulez un objet simple avec la même notation entre crochets ici, comme ceci:

var arrayName = {};
arrayName["indexName"] = value;
0
Nick Craver