En otros lenguajes como Python 2 y Python 3, puede definir y asignar valores a una variable de tupla y recuperar sus valores de la siguiente manera:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
¿Hay algo similar en JavaScript? O simplemente tengo que hacerlo de la manera más fea con una matriz:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
¿Existe una mejor manera de simular tuplas de Python en JavaScript 5?
Actualización: consulte la respuesta sobre ES6, que debería favorecerse sobre CoffeeScript para nuevos proyectos.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
Es un poco más mecanografiado, pero feo puede ser una exageración.Respuestas:
Javascript 1.7 agregó una asignación desestructurada que le permite hacer esencialmente lo que busca.
fuente
Tienes que hacerlo de la manera más fea. Si realmente quieres algo como esto, puedes consultar CoffeeScript , que tiene eso y muchas otras características que lo hacen parecerse más a Python (lo siento por hacer que suene como un anuncio, pero realmente me gusta).
fuente
Puedes hacer algo similar:
y luego referirse al nombre y la edad como atributos
fuente
Object.freeze()
, es decir:tuple = Object.freeze({ name:'Bob', age:14 })
Esta función de "tupla" se denomina desestructuración en EcmaScript2015 y pronto será compatible con los navegadores actualizados. Por el momento, solo Firefox y Chrome lo admiten .
Pero bueno, puedes usar un transpilador .
El código se vería tan bien como Python:
fuente
Una matriz congelada se comporta de manera idéntica a una tupla de Python:
Sea elegante y defina una clase
Funciona hoy en todos los navegadores más recientes.
fuente
Las tuplas no son compatibles con JavaScript
Si está buscando una lista inmutable, Object.freeze () puede usarse para hacer una matriz inmutable.
Fuente: Mozilla Developer Network - Object.freeze ()
Asigne una matriz como de costumbre pero ciérrela usando 'Object.freeze ()
Use los valores como lo haría con una matriz normal (no se admite la asignación múltiple de Python)
Intente asignar un nuevo valor
Pero el valor no cambia
fuente
Desafortunadamente, no puede usar esa sintaxis de asignación de tuplas en el script (ECMA | Java).
EDITAR: Alguien vinculado a Mozilla / JS 1.7: esto no funcionaría en todos los navegadores, pero si no es necesario, entonces está su respuesta.
fuente
Esto no está destinado a ser utilizado en la vida real, solo es un ejercicio interesante. Consulte ¿Por qué es una mala idea usar la función eval de JavaScript? para detalles.
Esto es lo más cercano que puede obtener sin tener que recurrir a extensiones específicas del proveedor:
Función de ayudante:
Prueba de que funciona en un ámbito arbitrario:
eval
no es compatible con Safari.fuente
Como actualización de la respuesta del Ministro, ahora puede hacer esto con es2015:
https://jsbin.com/fubaluwimo/edit?js,console
fuente
También puede tener un tipo de tupla en Javascript. Simplemente defínalo con funciones de orden superior (el término académico es codificación de la Iglesia):
Tenga en cuenta que
Tuple
no se utiliza como un constructor normal. La solución no se basa en absoluto en el sistema prototipo, sino únicamente en funciones de orden superior.¿Cuáles son las ventajas de las tuplas sobre
Array
las que se usan como tuplas? Las tuplas codificadas por Church son inmutables por diseño y, por lo tanto, previenen los efectos secundarios causados por mutaciones. Esto ayuda a crear aplicaciones más sólidas. Además, es más fácil razonar sobre el código que distingue entreArray
s como un tipo de colección (por ejemplo[a]
) y tuplas como datos relacionados de varios tipos (por ejemplo(a, b)
).fuente
Aquí hay una implementación simple de tupla de Javascript:
Esta es una tupla de 2, sin embargo, podría modificar mi ejemplo para admitir tuplas 3,4,5,6, etc.
fuente
tuple
instancia aún es mutable, por lo que técnicamente no es una tupla. Para el cambio de la pruebatuple.Item1 = "Steve"
y luegoconsole.log()
la salida.Aquí hay una versión de la respuesta de Matthew James Davis con los métodos de tupla de Python agregados en:
fuente