Split a string straight into variables
I’d like to know if standard JS provides a way of splitting a string straight into a set of variables during their initial declaration. For example in Perl I would use:
my ($a, $b, $c) = split '-', $str;
In Firefox I can write
var [a, b, c] = str.split('-');
But this syntax is not part of the ECMAScript 5th edition and as such breaks in all other browsers. What I’m trying to do is avoid having to write:
var array = str.split('-');
var a = array[0];
var b = array[1];
var c = array[2];
Because for the code that I’m writing at the moment such a method would be a real pain, I’m creating 20 variables from 7 different splits and don’t want to have to use such a verbose method.
Does anyone know of an elegant way to do this?
Solution 1:
You can only do it slightly more elegantly by omitting the var keyword for each variable and separating the expressions by commas:
var array = str.split('-'),
a = array[0], b = array[1], c = array[2];
ES6 standardises destructuring assignment, which allows you to do what Firefox has supported for quite a while now:
var [a, b, c] = str.split('-');
You can check browser support using Kangax's compatibility table.
Solution 2:
var str = '123',
array = str.split('');
(function(a, b, c) {
a; // 1
b; // 2
c; // 3
}).apply(null, array)
Solution 3:
Split a string into two part variables for a 3 or more word sentence.
> var [firstName, lastName] = 'Ravindra Kumar Padhi'.split(/(\w+)$/)
> console.log({firstName: firstName.trim(), lastName: lastName.trim()})
{ firstName: 'Ravindra Kumar', lastName: 'Padhi' }