118 votes

Utiliser un nombre entier comme clé dans un tableau associatif en JavaScript

Lorsque je crée un nouveau tableau JavaScript et que j'utilise un nombre entier comme clé, chaque élément de ce tableau jusqu'au nombre entier est créé comme étant indéfini.

Par exemple :

var test = new Array();
test[2300] = 'Some string';
console.log(test);

produira 2298 indéfinis et un 'Some string'.

Comment faire pour que JavaScript utilise 2300 comme une chaîne de caractères au lieu d'un nombre entier, ou comment l'empêcher d'instancier 2299 indices vides ?

4voto

bdukes Points 54833

Utilisez un objet au lieu d'un tableau. Les tableaux en JavaScript ne sont pas des tableaux associatifs. Ce sont des objets avec de la magie associée à toutes les propriétés dont les noms ressemblent à des entiers. Cette magie n'est pas ce que vous voulez si vous ne les utilisez pas comme une structure traditionnelle de type tableau.

var test = {};
test[2300] = 'some string';
console.log(test);

3voto

Jeff Hammerbacher Points 2020

Essayez d'utiliser un objet, pas un tableau :

var test = new Object(); test[2300] = 'Some string';

2voto

user2733283 Points 11

Obtenez la valeur d'une propriété de tableau associatif lorsque le nom de la propriété est un nombre entier :

En commençant par un tableau associatif où les noms des propriétés sont des entiers :

var categories = [
    {"1": "Category 1"},
    {"2": "Category 2"},
    {"3": "Category 3"},
    {"4": "Category 4"}
];

Pousse les éléments dans le tableau :

categories.push({"2300": "Category 2300"});
categories.push({"2301": "Category 2301"});

Boucle dans le tableau et fait quelque chose avec la valeur de la propriété.

for (var i = 0; i < categories.length; i++) {
    for (var categoryid in categories[i]) {
        var category = categories[i][categoryid];
        // Log progress to the console
        console.log(categoryid + ": " + category);
        //  ... do something
    }
}

La sortie de la console devrait ressembler à ceci :

1: Category 1
2: Category 2
3: Category 3
4: Category 4
2300: Category 2300
2301: Category 2301

Comme vous pouvez le voir, vous pouvez contourner la limitation des tableaux associatifs et faire en sorte que le nom d'une propriété soit un nombre entier.

NOTE : Le tableau associatif dans mon exemple est le contenu JSON que vous auriez si vous sérialisez un objet Dictionary<string, string>[].

0voto

Upperstage Points 2420

Utilisez un objet - avec un entier comme clé - plutôt qu'un tableau.

0voto

pictus Points 77

Parfois, j'utilise un préfixe pour mes clés. Par exemple :

var pre = 'foo',
    key = pre + 1234

obj = {};

obj[key] = val;

Maintenant, vous n'avez aucun problème pour y accéder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X