2012-02-23 6 views
0

Я ищу, чтобы взять строку и найти все пробелы в ней и разделить ее на разные переменные. Я знаю, что могу использовать .split(), но это не приведет к новым переменным. Я бы предпочел не использовать jQuery или другую библиотеку JavaScript, но если мне это нужно, это не будет худшим. Благодаря!Отдельная строка Javascript для разных переменных


Пример, John M Peters привело бы к переменным fname: John, mname: M и lname: Peters.

+0

ли все имена всегда имеет отчество? – Paul

+0

Нет, они этого не делают. Я делаю чек, прежде чем разбить его, чтобы увидеть, есть ли средний начальный. –

ответ

4

.split() просто возвращает массив, так что вы можете легко назначить новые переменные с помощью этого ...

var str = "John M Peters"; 
var fname = str.split(" ")[0]; 
var mname = str.split(" ")[1]; 
var lname = str.split(" ")[2]; 
+0

Хорошо спасибо, похоже, что он будет работать отлично –

+2

А, я так с нетерпением жду будущего, когда мы сможем сделать 'let [fname, mname, lname] = str.split (" ");' – Domenic

+0

I подумайте, что вы можете сделать что-то подобное в сценарии кофе по крайней мере: '[fname, mname, lname] =" John M Peters ".split ('')' – mportiz08

2

Вы можете разбить строку следующим образом:

var name = 'John M Peters'; 
var arr = name.split(' '); 

var obj = {fname: arr[0]}; 
if(arr.length === 1) { 
    obj.lname = arr[1]; 
} else { 
    obj.mname = arr[1]; 
    obj.lname = arr[2]; 
} 

console.log(obj.fname); 
console.log(obj.mname); //could be undefined 
console.log(obj.lname); 

Это решение также будет работать строка, которая также не имеет среднего начального значения. Вы можете увидеть этот пример здесь: http://jsfiddle.net/nDwmY/2/

0

Я бы создал функцию вдоль этих линий. Это просто быстро и грязно и не делает никакой проверки, я оставляю это до вас.

function parse_name(theName) { 
    var nameSplit = theName.split(" "); 

    var nameFields = { 
      first : nameSplit[0], 
      middle : nameSplit[1], 
      last : nameSplit[2] 
     }; 

    return nameFields; 
} 

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

var parsedName = parse_name("John M Smith"); 

alert(parsedName.first); // Should alert "John" 
alert(parsedName.middle); // Should alert "M" 
alert(parsedName.last); // Should alert "Smith" 
0

В дополнение к ответам на другие указывали, я хотел бы отметить, что двигатель JavaScript в Mozilla (SpiderMonkey) поддерживает деструктурирующие задания:

<script language="javascript1.7"> 
    var s = 'John M. Peters'; 
    var fname, mname, lname; 

    [fname, mname, lname] = s.split(/\s+/); 
    alert('fname = ' + fname + ', mname = ' + mname + ', lname = ' + lname); 
</script> 

Это не портативный, так не идеально подходит для веб-программирования. Однако, если вы пишете плагин для firefox или thunderbird и т. Д., Тогда есть ряд интересных расширений языка.

+0

Это не кросс-браузер совместимая система, исправна? –

+1

Правильно, следовательно, мое предостережение о переносимости; Но ОП не указал цель этого JS-кода. Для плагина или такого вполне уместно. – FatalError

0

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

var str = "How are you doing today, my dear friend?"; 
numberspaces = str.split(" ").length; //you know how many spaces there are 
words=str.split(" ");     //it creates an array of words 
var i; 
for (i = 0; i < numberspaces; i++){ 
console.log(words[i]);} 
Смежные вопросы