Lorsque je crée un nouveau tableau JavaScript et que j'utilise un entier comme clé, chaque élément de ce tableau jusqu'à l'entier est créé comme non défini.
Par exemple:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
affichera 2298 indéfinis et un 'Some string'.
Comment dois-je faire en sorte que JavaScript utilise 2300 comme chaîne au lieu d'un entier, ou comment dois-je l'empêcher d'instancier 2299 indices vides?
javascript
associative-array
Peter Mortensen
la source
la source
0.25
et.25
résolvez la même chaîne"0.25"
. Donc , si vous utilisez les touches fractionnaires, vous pouvez récupérer la propriété d'une clé numérique mis à l'0.25
aide0.25
,.25
,"0.25"
mais pas".25"
.Vous pouvez simplement utiliser un objet:
la source
Comme les gens le disent, JavaScript convertira une chaîne de nombre en entier, il n'est donc pas possible de l'utiliser directement sur un tableau associatif, mais les objets fonctionneront pour vous de la même manière que je pense.
Vous pouvez créer votre objet:
Et ajoutez les valeurs au fur et à mesure que le tableau fonctionne:
Cela vous donnera:
Après cela, vous pouvez y accéder comme un tableau dans d'autres langues pour obtenir la clé:
J'ai testé et fonctionne.
la source
Si le cas d'utilisation stocke des données dans une collection, ECMAScript 6 fournit le
Map
type.C'est seulement plus lourd à initialiser.
Voici un exemple:
Résultat:
la source
Compiler d'autres réponses:
Objet
Lorsque vous utilisez un nombre comme clé de nouvelle propriété, le nombre se transforme en chaîne:
Lors de l'accès à la valeur de la propriété en utilisant le même nombre, le nombre est à nouveau transformé en chaîne:
Lorsque vous récupérez les clés de l'objet, cependant, elles ne seront pas transformées en nombres:
Carte
ECMAScript 6 permet l'utilisation de l'objet Map ( documentation , comparaison avec Object ). Si votre code est destiné à être interprété localement ou si la table de compatibilité ECMAScript 6 semble suffisamment verte pour vos besoins, envisagez d'utiliser une carte:
Aucune conversion de type n'est effectuée, pour le meilleur et pour le pire:
la source
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és à 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.
la source
Essayez d'utiliser un objet, pas un tableau:
la source
var a = []; a[Math.pow(2, 30)] = 'hello';
et vous ne verrez pas l'utilisation du navigateur / de la mémoire augmenter de plus d'un gigaoctet, mais vous verrez quea.length
c'est 1073741824. Les VM stockent clairement certains «tableaux» en utilisant une autre structure de données, je suppose simplement une table de hachage, du moins si ils sont suffisamment clairsemés.Obtenez la valeur d'une propriété de tableau associatif lorsque le nom de la propriété est un entier:
En commençant par un tableau associatif où les noms de propriétés sont des entiers:
Poussez les éléments vers la baie:
Parcourez le tableau et faites quelque chose avec la valeur de la propriété.
La sortie de la console devrait ressembler à ceci:
Comme vous pouvez le voir, vous pouvez contourner la limitation du tableau associatif et faire en sorte qu'un nom de propriété soit un entier.
REMARQUE: Le tableau associatif dans mon exemple est le contenu JSON que vous auriez si vous sérialisiez un objet Dictionary <string, string> [].
la source
Utilisez un objet - avec un entier comme clé - plutôt qu'un tableau.
la source
Parfois, j'utilise un préfixe pour mes clés. Par exemple:
Maintenant, vous n'avez aucun problème à y accéder.
la source