Dans d'autres langages comme Python 2 et Python 3, vous pouvez définir et attribuer des valeurs à une variable de tuple et récupérer leurs valeurs comme ceci:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Y a-t-il quelque chose de similaire dans JavaScript? Ou est-ce que je dois juste le faire de la manière laide avec un tableau:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Existe-t-il un meilleur moyen de simuler des tuples Python dans JavaScript 5?
Mise à jour: voir la réponse concernant ES6, qui devrait être privilégiée par rapport à CoffeeScript pour les nouveaux projets.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
C'est un peu plus typé, mais laid pourrait être une exagération.Réponses:
Javascript 1.7 a ajouté une affectation déstructurée qui vous permet de faire essentiellement ce que vous recherchez.
la source
Vous devez le faire de manière laide. Si vous voulez vraiment quelque chose comme ça, vous pouvez consulter CoffeeScript , qui a cela et beaucoup d'autres fonctionnalités qui le font ressembler davantage à python (désolé de le faire sonner comme une publicité, mais je l'aime vraiment.)
la source
Vous pouvez faire quelque chose de similaire:
puis faites référence au nom et à l'âge comme attributs
la source
Object.freeze()
, à savoir:tuple = Object.freeze({ name:'Bob', age:14 })
Cette fonctionnalité "tuple" s'appelle la déstructuration dans EcmaScript2015 et sera bientôt prise en charge par des navigateurs à jour. Pour le moment, seuls Firefox et Chrome le prennent en charge .
Mais bon, tu peux utiliser un transpilateur .
Le code serait aussi beau que python:
la source
Un tableau gelé se comporte de la même manière qu'un tuple python:
Soyez chic et définissez une classe
Fonctionne aujourd'hui dans tous les derniers navigateurs.
la source
Les tuples ne sont pas pris en charge dans JavaScript
Si vous recherchez une liste immuable, Object.freeze () peut être utilisé pour rendre un tableau immuable.
Source: Réseau de développeurs Mozilla - Object.freeze ()
Assignez un tableau comme d'habitude mais verrouillez-le en utilisant 'Object.freeze ()
Utilisez les valeurs comme vous le feriez pour un tableau normal (la multi-affectation python n'est pas prise en charge)
Tentative d'attribution d'une nouvelle valeur
Mais la valeur n'est pas modifiée
la source
Malheureusement, vous ne pouvez pas utiliser cette syntaxe d'affectation de tuple dans le script (ECMA | Java).
EDIT: Quelqu'un lié à Mozilla / JS 1.7 - cela ne fonctionnerait pas entre les navigateurs, mais si ce n'est pas nécessaire, il y a votre réponse.
la source
Ce n'est pas destiné à être utilisé dans la vraie vie, juste un exercice intéressant. Voir Pourquoi l'utilisation de la fonction JavaScript eval est-elle une mauvaise idée?pour plus de détails.
C'est le plus proche que vous pouvez obtenir sans recourir aux extensions spécifiques au fournisseur:
Fonction d'assistance:
Preuve que cela fonctionne dans une portée arbitraire:
eval
n'est pas pris en charge dans Safari.la source
Pour mettre à jour la réponse du ministre, vous pouvez maintenant le faire avec es2015:
https://jsbin.com/fubaluwimo/edit?js,console
la source
Vous pouvez également avoir un type de tuple en Javascript. Définissez-le simplement avec des fonctions d'ordre supérieur (le terme académique est l'encodage de l'Église):
Veuillez noter que ce
Tuple
n'est pas utilisé comme un constructeur normal. La solution ne repose pas du tout sur le système prototype, mais uniquement sur des fonctions d'ordre supérieur.Quels sont les avantages des tuples par rapport aux
Array
s utilisés comme des tuples? Les tuples encodés en église sont immuables par conception et empêchent ainsi les effets secondaires causés par les mutations. Cela permet de créer des applications plus robustes. De plus, il est plus facile de raisonner sur le code qui distingueArray
s en tant que type de collection (par exemple[a]
) et les tuples en tant que données liées de différents types (par exemple(a, b)
).la source
Voici une implémentation simple de Javascript Tuple:
Ceci est un 2-tuple, cependant, vous pouvez modifier mon exemple pour prendre en charge les tuples 3,4,5,6 etc.
la source
tuple
instance est toujours modifiable, donc ce n'est techniquement pas un tuple. Pour changer la preuvetuple.Item1 = "Steve"
alorsconsole.log()
la sortie.Voici une version de la réponse de Matthew James Davis avec les méthodes de tuple Python ajoutées:
la source