61

標準の JS が、最初の宣言中に文字列を一連の変数に直接分割する方法を提供しているかどうかを知りたいです。たとえば、Perl では次のように使用します。

my ($a, $b, $c) = split '-', $str;

Firefoxで私は書くことができます

var [a, b, c] = str.split('-');

しかし、この構文は ECMAScript 第 5 版には含まれていないため、他のすべてのブラウザーでは機能しません。私がやろうとしているのは、書く必要を避けることです:

var array = str.split('-');
var a = array[0];
var b = array[1];
var c = array[2];

現在私が書いているコードでは、このようなメソッドは本当に面倒なので、7 つの異なる分割から 20 個の変数を作成していますが、そのような冗長なメソッドを使用する必要はありません。

これを行うためのエレガントな方法を知っている人はいますか?

4

4 に答える 4

114

各変数のvarキーワードを省略し、式をコンマで区切ることで、もう少しエレガントに行うことができます。

var array = str.split('-'),
    a = array[0], b = array[1], c = array[2];

ES6 は分割代入を標準化し、Firefox がかなり前からサポートしてきたことを実行できるようにします。

var [a, b, c] = str.split('-');

Kangax の互換性テーブルを使用して、ブラウザのサポートを確認できます。

于 2010-08-19T14:00:50.327 に答える
9
var str = '123',
    array = str.split('');

(function(a, b, c) {
    a; // 1
    b; // 2
    c; // 3
}).apply(null, array)
于 2010-08-19T14:09:20.220 に答える
0

str.split メソッドによって作成された配列をループする関数を作成し、この方法で変数を自動生成できます。

function autoGenerateVarFromArray(srcArray, varNamePrefix)
{
  var i = 0
  while(i < srcArray.length)
  {
    this[varNamePrefix +'_' + i] = srcArray[i]; 
    i++;
  } 
}

これを使用する方法の例を次に示します。

var someString = "Mary had a little Lamb";
autoGenerateVarFromArray(someString.split(' '), 'temp');

alert(this.temp_3); // little
于 2010-08-19T14:11:14.303 に答える