Em outras linguagens, como Python 2 e Python 3, você pode definir e atribuir valores a uma variável de tupla e recuperar seus valores assim:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Existe algo semelhante em JavaScript? Ou eu apenas tenho que fazer isso da maneira feia com um array:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Existe uma maneira melhor de simular tuplas Python em JavaScript 5?
Atualização: Veja a resposta sobre ES6, que deve ser preferido em relação ao CoffeeScript para novos projetos.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
É um pouco mais de digitação, mas feio pode ser um exagero.Respostas:
Javascript 1.7 adicionou atribuição desestruturada que permite que você faça essencialmente o que você está procurando.
fonte
Você tem que fazer da maneira mais feia. Se você realmente quer algo assim, pode dar uma olhada no CoffeeScript , que tem isso e muitos outros recursos que o tornam mais parecido com o python (desculpe por fazer parecer um anúncio, mas eu realmente gosto).
fonte
Você pode fazer algo semelhante:
e então se referem ao nome e idade como atributos
fonte
Object.freeze()
, por exemplo:tuple = Object.freeze({ name:'Bob', age:14 })
Esse recurso de "tupla" é chamado de desestruturação no EcmaScript2015 e em breve será compatível com navegadores atualizados. Por enquanto, apenas Firefox e Chrome suportam .
Mas hey, você pode usar um transpiler .
O código seria tão bom quanto python:
fonte
Uma matriz congelada se comporta de forma idêntica a uma tupla Python:
Seja sofisticado e defina uma classe
Funciona hoje em todos os navegadores mais recentes.
fonte
Tuplas não são compatíveis com JavaScript
Se você estiver procurando por uma lista imutável, Object.freeze () pode ser usado para tornar um array imutável.
Fonte: Mozilla Developer Network - Object.freeze ()
Atribua uma matriz como de costume, mas bloqueie-a usando 'Object.freeze ()
Use os valores como faria com uma matriz regular (a multi-atribuição de python não é compatível)
Tentar atribuir um novo valor
Mas o valor não é alterado
fonte
Infelizmente, você não pode usar essa sintaxe de atribuição de tupla no (ECMA | Java) Script.
EDIT: Alguém vinculado ao Mozilla / JS 1.7 - isso não funcionaria em vários navegadores, mas se não for necessário, aí está sua resposta.
fonte
Isso não se destina a ser usado na vida real, apenas um exercício interessante. Veja Por que usar a função eval JavaScript é uma má ideia? para detalhes.
Este é o mais próximo que você pode obter sem recorrer a extensões específicas do fornecedor:
Função auxiliar:
Prova de que funciona em âmbito arbitrário:
eval
não é compatível com Safari.fonte
Para atualizar a resposta do Ministro, agora você pode fazer isso com es2015:
https://jsbin.com/fubaluwimo/edit?js,console
fonte
Você também pode ter um tipo de tupla em Javascript. Basta defini-lo com funções de ordem superior (o termo acadêmico é codificação de Igreja):
Observe que
Tuple
não é usado como um construtor normal. A solução não depende do sistema de protótipo, mas apenas de funções de ordem superior.Quais são as vantagens das tuplas sobre
Array
as usadas como tuplas? As tuplas codificadas por igreja são imutáveis por design e, portanto, evitam os efeitos colaterais causados por mutações. Isso ajuda a construir aplicativos mais robustos. Além disso, é mais fácil raciocinar sobre o código que distingue entreArray
s como um tipo de coleção (por exemplo[a]
) e tuplas como dados relacionados de vários tipos (por exemplo(a, b)
).fonte
Aqui está uma implementação simples de Tuple Javascript:
Esta é uma tupla de 2, no entanto, você pode modificar meu exemplo para suportar tuplas 3,4,5,6 etc.
fonte
tuple
instância ainda é mutável, portanto, tecnicamente, não é uma tupla. Para alteração de prova,tuple.Item1 = "Steve"
entãoconsole.log()
a saída.Aqui está uma versão da resposta de Matthew James Davis com os métodos de tupla Python adicionados em:
fonte