JavaScript: разбить строку прямо на переменные - PullRequest
26 голосов
/ 19 августа 2010

Я хотел бы знать, предоставляет ли стандартный JS способ разбиения строки прямо на набор переменных во время их первоначального объявления.Например, в Perl я бы использовал:

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

В Firefox я могу написать

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

Но этот синтаксис не является частью стандарта ECMA и, как таковой, прерывается во всех других браузерах.То, что я пытаюсь сделать, это избежать написания:

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

Поскольку для кода, который я пишу в данный момент, такой метод будет настоящей болью, я создаю 20 переменных из7 различных разбиений и не нужно использовать такой многословный метод.

Кто-нибудь знает какой-нибудь элегантный способ сделать это?

Ответы [ 4 ]

49 голосов
/ 19 августа 2010

Вы можете сделать это только немного более элегантно, опуская ключевое слово var для каждой переменной и разделяя выражения запятыми:

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

ES6 стандартизирует деструктуризациюназначение, которое позволяет вам делать то, что Firefox уже давно поддерживает:

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

Вы можете проверить поддержку браузера, используя таблицу совместимости Kangax .

8 голосов
/ 19 августа 2010
var str = '123',
    array = str.split('');

(function(a, b, c) {
    a; // 1
    b; // 2
    c; // 3
}).apply(null, array)
1 голос
/ 19 февраля 2019

Разделить строку на две переменные части для предложения из 3 или более слов.

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

> console.log({firstName: firstName.trim(), lastName: lastName.trim()})
{ firstName: 'Ravindra Kumar', lastName: 'Padhi' }
0 голосов
/ 19 августа 2010

Вы можете создать функцию, которая будет перебирать массив, созданный методом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...