Как разбить и присвоить 2 слова? - PullRequest
8 голосов
/ 30 марта 2011

У меня есть фраза с двумя словами:

var phrase = "hello world"

, и я хочу разделить и назначить, как в:

var words = phrase.split(" ");
var word1 = words[0];
var word2 = words[1];

Есть ли более простой способ, чем эти три строки?

[обновлено]

Я ищу способ сделать это в одной строке, например:

var word1 word2 = phrase.split(" ");

isэто возможно?

Ответы [ 6 ]

11 голосов
/ 30 марта 2011

Если вы используете Javascript 1.7 (не только ECMAscript), вы можете использовать деструктурирующее назначение :

var [a, b] = "hello world".split(" ");
2 голосов
/ 02 августа 2012

Поздно к вечеринке, но вот конструкция из 1 строки, которую я использовал

var word1, word2;
(function(_){ word1 = _[0]; word2 = _[1]; })(phrase.split(" "));
2 голосов
/ 30 марта 2011
var words = "hello world".split(" ");
var word1 = words[0];
var word2 = words[1];

Так же долго, но гораздо более читабельно. Чтобы ответить на ваш вопрос, я думаю, что вышеупомянутое достаточно просто, не вдаваясь в регулярные выражения.

Обновление

К сожалению, JavaScript не имеет функции параллельного присваивания, как Ruby. То есть

var word1, word2 = phrase.split(" "); не установит word1 и word2 на words[0] и words[1] соответственно.

Вместо этого было бы установить и word1, и word2 в возвращаемый массив ["hello", "world"].

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

2 голосов
/ 30 марта 2011

Единственное, что я предлагаю, это кешировать результат разделения, а не пересчитывать его.

var phrase = "hello world";
var splitPhrase = phrase.split(" ");
var word1 = splitPhrase[0];
var word2 = splitPhrase[1];
2 голосов
/ 30 марта 2011

Я не эксперт по JavaScript, но, посмотрев на ваш код, я бы сказал, что вы можете сделать его более эффективным.

Ваш код вызывает разделение дважды, что означает, что исходная строка должна быть проанализирована дважды. Хотя это может и не иметь большого значения, этот вид программирования складывается.

Так что, как правило, было бы более эффективно делать код, подобный этому:

var words = phrase.split(" ");
var word1 = words[0];
var word2 = words[1];
1 голос
/ 30 марта 2011

Не уверен, что вы можете сделать это «меньше строк», но вам, конечно, не нужно делать разделение дважды.

 var words = "hello world".split(" "),
     word1 = words[0],
     word2 = words[1];
...