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 回答
6

将字符串拆分为 3 个或更多单词的句子的两个部分变量。

> var [firstName, lastName] = 'Ravindra Kumar Padhi'.split(/(\w+)$/)

> console.log({firstName: firstName.trim(), lastName: lastName.trim()})
{ firstName: 'Ravindra Kumar', lastName: 'Padhi' }
于 2019-02-19T08:49:48.857 回答
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 回答