7
votes

Syntaxe pour créer des objets avec des touches composites dans JavaScript

Y a-t-il une syntaxe pour passer des touches composites, i.e. listes et objets,
Comme l'exemple ci-dessous, ou est-ce que la conception?

> obj = {};
> obj[[1, 2]] = 3;
3
> [1, 2] in obj;
> true


2 commentaires

Pourquoi avez-vous besoin de clés composites?


@ NT3RP, les résultats SQL seront chargés sur des objets JavaScript et des clés composites seront nécessaires.


3 Réponses :


1
votes

Avez-vous besoin du [1, 2] pour être préservé comme une matrice? Qu'est-ce que cela vous permettrait exactement de faire? Je ne connais pas les "touches composites", donc peut-être une courte explication pour un lien à clarifier aiderait à mieux comprendre votre problème.

Si vous voulez simplement utiliser [1, 2] En tant que clé, vous pouvez toujours utiliser cela comme chaîne: xxx

mais à nouveau, je suppose que vous voudriez garder [1, 2] En tant que tableau.


2 commentaires

Pour que les objets soient utilisés comme touches, chaque objet devrait mettre en place une méthode de code HASHCODE, comme Java. Depuis que HashCode est une grande source de bogues, des clés JavaScript uniquement à des cordes


@JuanMendes Re: "Depuis que HashCode est une grande source de bogues" - citation nécessaire.



11
votes

objet noms de propriété dans JavaScript sont à la fin juste des chaînes, votre deuxième exemple semble fonctionner car l'accesseur de propriété de support convertit le [1, 2] expression à < Code> chaîne (retour "1,2" ), par exemple: xxx

Un autre exemple: xxx

Voir aussi:


8 commentaires

Donc, les objets sont convertis en cordes, évidemment je ne savais pas que


Je pense que vous devriez ajouter quelque chose à répondre à la question, il souhaite pouvoir utiliser des objets littéraux. Op pourrait utiliser a = {"1,2": bonjour} , puis l'accédez à l'aide d'un [[1,2]], semble bizarre mais que tu veux faire


@Nick Dandoulakis: Oui, même des tableaux sont clés par des chaînes. Essayez ceci var arr = ["bonjour", "monde"]; alerte (arr ["1"]); jsfiddle.net/mendesjuan/27z4u


@CMS, @juan: Je pourrais utiliser des chaînes pour clés, car JavaScript ne prend pas en charge ce que je veux, et le lien ci-dessus à Jshashable semble intéressant. Je vais devoir le tester.


Jshashable semble bon, méfiez-vous qu'il est basé sur une égalité stricte, donc deux objets qui ont l'air identique ne correspondent pas au même objet. Pour la meilleure mise en oeuvre de hashtable, vous devez implémenter un équivalent et une méthode de hashcode pour vos objets, comme Java


@Juan, voulez-vous dire, par exemple, [1, 2] et [2, 1] aura des hachages différents?


@Nick: Les hachages n'existent que si vous les implémentez, vous pouvez donc décider si ceux-ci devraient donner le même code de hachage. Depuis leur site Web, il semble que ce n'est pas vraiment une carte de hachage, sauf si vous ne le mettez en œuvre. Sans fonction de hachage, tout se passe dans le même seau, il va donc essentiellement de rechercher dans l'ensemble de la matrice. Ce que je voulais vraiment dire, c'est que si vous faites hash.set ([1,2], "bonjour") puis essayez de le récupérer en utilisant hachage ([1,2]) , alors cela échouera car les deux tableaux ne sont pas le même objet (en utilisant ===). Cependant, a = [1,2]; hash.set (a, "bonjour"); hash.get (a) fonctionnera. Lire la section 'codes de hash'


Je ne sais pas si cela changeait au fil du temps, mais je viens d'essayer d'utiliser ceci, et [1, 2] -> ["1"]



2
votes

Si vous ne voulez pas faire de la concaténation de chaîne, vous pouvez utiliser des cartes imbriquées, puis une enveloppe pour rendre le code moins verbeux. Voici un exemple de type type. XXX


0 commentaires