Подтвердить что ты не робот

Javascript: спрятать строку прямо к переменным

Я хотел бы знать, поддерживает ли стандартный 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 разных разделов и не хочу использовать такой подробный метод.

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

var str = '123',
    array = str.split('');

(function(a, b, c) {
    a; // 1
    b; // 2
    c; // 3
}).apply(null, array)

Ответ 3

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

Ответ 4

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

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

> console.log({firstName: firstName.trim(), lastName: lastName.trim()})
{ firstName: 'Ravindra Kumar', lastName: 'Padhi' }