122

Python 2 や Python 3 などの他の言語では、値を定義してタプル変数に割り当て、次のように値を取得できます。

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

JavaScript に似たようなものはありますか? それとも、配列を使って醜い方法で行う必要がありますか:

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

JavaScript 5 で Python タプルをシミュレートするより良い方法はありますか?

更新:新しいプロジェクトでは、CoffeeScript よりも優先する必要がある ES6 に関する回答を参照してください。

4

12 に答える 12

157

Javascript 1.7では、基本的に必要な処理を実行できるようにする分割代入が追加されました。

function getTuple(){
   return ["Bob", 24];
}
var [a, b] = getTuple();
// a === "bob" , b === 24 are both true
于 2010-12-22T19:44:41.297 に答える
50

あなたは醜い方法でそれをしなければなりません。このようなものが本当に必要な場合は、 CoffeeScriptをチェックしてください。CoffeeScriptには、Python のように見えるその他の多くの機能があります (広告のように聞こえて申し訳ありませんが、私は本当に気に入っています)。

于 2010-12-22T18:34:32.007 に答える
35

同様のことができます:

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

名前と年齢を属性として参照する

tuple.name 
tuple.age 
于 2013-02-22T13:49:40.147 に答える
29

この「タプル」機能は、EcmaScript2015 では destructuring と呼ばれ、最新のブラウザーでまもなくサポートされる予定です。当分の間、Firefox と Chrome のみがサポートしています。

でもねえ、あなたはトランスパイラーを使うことができます。

コードは python と同じくらい見栄えがします。

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

console.log(name)
console.log(age)
于 2015-11-06T10:18:50.893 に答える
5

残念ながら、(ECMA|Java)Script でそのタプル代入構文を使用することはできません。

編集: Mozilla/JS 1.7 にリンクされている人 - これはクロスブラウザーでは機能しませんが、それが必要ない場合は、あなたの答えがあります。

于 2010-12-22T18:32:32.880 に答える
4

これは、実生活で実際に使用することを意図したものではなく、興味深い演習です。JavaScript eval 関数の使用が悪い考えである理由を参照してください。詳細については。

これは、ベンダー固有の拡張機能に頼らずに取得できる最も近いものです。

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

ヘルパー関数:

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(',');
}

任意の範囲で機能することの証明:

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

evalSafari ではサポートされていません。

于 2012-04-24T13:00:36.187 に答える