131 votes

Assignations de variables JavaScript à partir de Tuples

Dans d'autres langages comme le python, vous pourriez faire quelque chose comme ceci:

 tuple = ("Bob", 24)
name, age = tuple
 

Y a-t-il quelque chose de similaire en JavaScript? Ou dois-je simplement le faire de la manière laide:

 tuple = ["Bob", 24]
name = tuple[0]
age = tuple[1]
 

178voto

pc1oad1etter Points 3910

Javascript 1.7 ajouté déstructuré affectation qui vous permet de faire essentiellement ce que vous êtes après.

modérateur edit: pour clarifier, Javascript 1.7 est mozilla-spécifique, pas de croix-navigateur, et non pas de l'être, et aussi de Nov 2012, vous ne devriez pas faire cela!

function getTuple(){
   return ["Bob", 24];
}
var a, b;
[a, b] = getTuple();
// a === "bob" , c === 24

50voto

Gabi Purcaru Points 15158

Vous devez le faire de la manière laide. Si vous voulez vraiment quelque chose comme ça, vous pouvez aller voir CoffeeScript , qui a cela et beaucoup d’autres fonctionnalités qui le font ressembler plus à python (désolé de le faire sonner comme une publicité, mais je l’aime vraiment beaucoup.)

34voto

mcm Points 187

Vous pouvez faire quelque chose de similaire:

 tuple = { name:'Bob', age:14 };
 

puis se référer au nom et à l'âge en tant qu'attributs

 tuple.name 
tuple.age 
 

5voto

meder Points 81864

Malheureusement, vous ne pouvez pas utiliser cette syntaxe d'attribution de tuple dans le script (ECMA | Java).

EDIT: Quelqu'un lié à Mozilla / JS 1.7 - cela ne fonctionnerait pas multi-navigateur, mais si cela n’est pas nécessaire, voici la réponse.

4voto

ninjagecko Points 25709

Il n'est pas destinée à être réellement utilisée dans la vraie vie, juste un exercice intéressant. Voir (Pourquoi utiliser le JavaScript de la fonction eval une mauvaise idée?(Pourquoi utiliser le JavaScript de la fonction eval une mauvaise idée?) pour plus de détails.

C'est le plus proche que vous pouvez obtenir sans avoir recours à des extensions spécifiques au fournisseur:

myArray = [1,2,3];
eval(set('a,b,c = myArray'));

Fonction d'aide:

function set(code) {
    var vars=code.split('=')[0].trim().split(',');
    var array=code.split('=')[1].trim();
    return 'var '+vars.map(function(x,i){return x+'='+array+'['+i+']'}).join(',');
}

La preuve que cela fonctionne dans l'arbitraire de la portée:

(function(){
    myArray = [4,5,6];
    eval(set('x,y,z = myArray'));
    console.log(y);  // prints 5
})()

eval n'est pas dans Safari.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X