JavaScriptで配列を個別の変数にアンパックする


141

これは簡単な問題で、以前に行ったことがあります。どのように呼ばれたか、正確には何と呼ばれたか思い出せない。

Pythonではこれを行うことができます:

arr = ['one', 'two']
one, two = arr

JavaScriptでそれを行うにはどうすればよいですか?

回答:


173

これは現在、ブラウザ間で互換性のある唯一のソリューションです。

var one = arr[0],
    two = arr[1];

ES6は、破壊的な割り当てを許可します。

let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'

または、最初の例に固執するために:

var arr = ['one', 'two'];
var [one, two] = arr;

デフォルト値を作成することもできます:

const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'

5
割り当てを構造化代入することは、今日ののように完全なサポートがあるkangax.github.io/compat-table/es6/#test-destructuring
grandrew

20

それは破壊的な割り当てです。一部のブラウザでは、次の構文で実行できます。

[one, two] = arr;

最新のブラウザやBabelTraceurなどのトランスパイラでサポートされています。これは、後にECMAScript Harmonyになり、最終的にES 2015になるECMAScript 4で導入された機能です。


ES4ではなくES6(2015)の一部のように見えますか?ecma-international.org/ecma-262/6.0/...
ジャブ

@ジャブ:ありがとう!Mathiasがすでにその情報を回答に追加しているようですが、これらの古い回答は忘れられて古くなることがあります:)
Andy E


6

配列の項目を関数の引数として渡す場合は、配列の適用関数を使用できます。


4
JavaScript Array.apply()関数があるかどうかはわかりません。あなたが意味したと思いますsome_function.apply(this, my_array)。この回答を
キット


2
var one = arr[0];
var two = arr[1];

1
var変数を使用してグローバルスコープを汚染しないようにする必要があります。
Mathias Bynens 2010

私はそのすべての宣言された変数を想定しているだけです:)
rob waminal

var2つの個別のvar宣言を作成するよりも、各スコープのすべてのを1回で宣言する方が良いでしょう。
Mathias Bynens、2010

2

CoffeeScriptにはそれがあります:http : //jashkenas.github.com/coffee-script/#pattern_matching

そして、ページの上部から引用:

「CoffeeScriptはJavaScriptにコンパイルされる小さな言語です。JavaScriptの目立たない子供兄弟と同じように考えてください。同じ遺伝子で、ほぼ同じ高さですが、スタイルの感覚は異なります。ほんの少しのボーナス特典を除いて、CoffeeScriptのステートメントは1つに対応しますJavaScriptで同等のものを1対1で使用することは、それを言い換える別の方法にすぎません。」


1
これは質問の答えにはなりません。CoffeeScriptにはきちんとした機能があることを感謝していますが、問題はJavaScriptについてです。
Hovis Biddle 2016

デッドリンク:((((
Paul Draper
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.