web-dev-qa-db-fra.com

Javascript. Attribuer des valeurs de tableau à plusieurs variables?

var a,b,c;
var arr = [1,2,3];
[a,b,c] = arr;

ce code fonctionne parfaitement dans Firefox résultant a = 1, b = 2 et c = 3,
mais cela ne fonctionne pas dans Chrome. Est-ce un bug Chrome ou
ce n'est pas un code javascript valide? (Je ne l'ai pas trouvé dans les références javascript)

Comment puis-je modifier ce code pour le rendre compatible avec Chrome, avec un minimum de dommages?
(Je n'aime pas vraiment écrire a = arr [0]; b = arr [1] ... ou la même chose avec arr.shift () tout le temps)

P.S. c'est juste un exemple de code, en vrai code
J'obtiens le tableau arr quelque part en dehors de mon code

75
tsds

Il s'agit d'une nouvelle fonctionnalité de JavaScript 1.7 appelée Affectation de la destruction :

L'affectation de déstructuration permet d'extraire des données de tableaux ou d'objets à l'aide d'une syntaxe qui reflète la construction de tableaux et d'objets littéraux.

Les expressions littérales d'objet et de tableau permettent de créer facilement des packages de données ad hoc. Une fois que vous avez créé ces packages de données, vous pouvez les utiliser comme vous le souhaitez. Vous pouvez même les renvoyer des fonctions.

Une tâche particulièrement utile que vous pouvez faire avec la déstructuration est de lire une structure entière dans une seule instruction, bien qu'il y ait un certain nombre de choses intéressantes que vous pouvez faire avec elles, comme indiqué dans la section pleine d'exemples qui suit.

Vous pouvez utiliser l'affectation de déstructuration, par exemple, pour échanger des valeurs:

var a = 1;
var b = 3;
[a, b] = [b, a];

Cette capacité est similaire aux fonctionnalités présentes dans des langages tels que Perl et Python.

Malheureusement, selon ce tableau des versions , JavaScript 1.7 n'a pas été implémenté dans Chrome. Mais il devrait être présent dans:

  • FireFox 2.0+
  • IE 9
  • Opera 11.50.

Essayez-le par vous-même dans ce jsfiddle: http://jsfiddle.net/uBReg/

J'ai testé cela sur Chrome (échoué), IE 8 (échoué) et FireFox 5 (qui fonctionnait, selon la table wiki).

89
Justin Ethier

Il n'est possible que pour Javascript 1.7 comme déjà répondu par @Justin. Voici un essai pour le simuler dans les navigateurs répandus:

function assign(arr, vars) {
    var x = {};
    var num = Math.min(arr.length, vars.length);
    for (var i = 0; i < num; ++i) {
        x[vars[i]] = arr[i];
    }
    return x;
}
var arr = [1, 2, 3];
var x = assign(arr, ['a', 'b', 'c']);
var z = x.a + x.b + x.c;  // z == 6

Je ne sais pas à quel point c'est utile.

7
Jiri Kriz