tupler - Är det möjligt i JavaScript att samtidigt tilldela flera variabler som det är i Python?


I vissa språk, som Python, kan du definiera och tilldela värden till en tuppel av variabler och hämta deras värden på detta sätt:

name, age = ("Bob", 24)
print(name)           # name evaluates to "Bob"
print(age)            # age evaluates to 24

Finns det något liknande i JavaScript? Eller måste jag bara göra det på det fula sättet med en array:

tuple = ["Bob", 24];
name = tuple[0];      // name Evaluates to Bob
age = tuple[1];       // age Evaluates to 24

Finns det ett bättre sätt att simulera Python-tupler i JavaScript?

Svar #1

JavaScript 1.7 lade till syntax för destruktureringsuppdrag som låter dig göra i princip det du är ute efter:

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

Svar #2

Du måste göra det på det fula sättet. Om du verkligen vill ha något liknande detta kan du kolla in CoffeeScript, som har det och en hel del andra funktioner som gör att det ser mer ut som Python (förlåt för att det låter som en reklam, men jag gillar det verkligen).

Svar #3

Du kan göra något liknande:

var tuple = Object.freeze({ name:'Bob', age:14 })

och hänvisa sedan till namn och ålder som attribut

tuple.name 
tuple.age 

Svar #4

Denna "tuple"-funktion kallas destrukturering i EcmaScript2015 och kommer snart att stödjas av uppdaterade webbläsare. För närvarande stöds den endast av Firefox och Chrome.

Men hej, du kan använda en transpiler.

Koden skulle se lika snygg ut som Python:

let tuple = ["Bob", 24]
let [name, age] = tuple

console.log(name)
console.log(age)

Svar #5

En frusen lista beter sig identiskt med en python-tuple:

const tuple = Object.freeze(["Bob", 24]);
let [name, age]; = tuple
console.debug(name); // "Bob"
console.debug(age); // 24

Var elegant och definiera en klass

class Tuple extends Array { 
  constructor(...items) { 
    super(...items); 
    Object.freeze(this);
  } 
}

let tuple = new Tuple("Jim", 35);
let [name, age] = tuple;
console.debug(name); // Jim
console.debug(age); // 35
tuple = ["Bob", 24]; // no effect 
console.debug(name); // Jim
console.debug(age); // 25

Fungerar idag i alla de senaste webbläsarna.

Relaterade artiklar