2014-12-11 3 views
-1

Сначала у меня есть массив, в котором есть две строки.Функция javascript принимает строку и возвращает массив

var Array = ["firstName lastName" , "anotherString"] 

Я хотел бы создать функцию, которая принимает в строке в качестве параметра и возвращает массив, разбивая входную строку на отдельные слова. Таким образом, результат в этом примере будет ["firstName", "lastName"]?

Я знаю, что это будет выглядеть как этот

var newFun = function(string) { 
    return string[0] // than do something else 
} 

Помощь высоко ценится!

+0

'Array [0] .split (» «)'? – Christoph

+0

"* Я хотел бы создать функцию, которая ... *" - и вы застряли, где? –

+0

Тратить немного времени на изучение Javascript окупится в пики! – sherb

ответ

2

Так просто, используйте метод String.prototype.split, чтобы разделить строки на список массивов.

MDN: Метод

Разделения() разбивает объект строки на массив строк, разделяя строку на подстроки.

return str.split(' '); 

@Christoph: Вы используете некоторые очень плохие конвенции здесь.

var Array 
function (string) 

Array предопределенный класс в JavaScript и string довольно близко к предопределенного класса String, так что просто не использовать их полностью.

var arr; 
function (str) 

Короткий Метод: разбивает строку с несколькими словами, ручки в стиле фанк строки, которые String.prototype.split(' ') не могут обрабатывать как " firstName Lastname" или просто "firstName Lastname". возвращает Array

function smartSplit (str) { 
    // .trim() remove spaces surround the word 
    // /\s+/ split multiple spaces not just one ' ' 
    return str.trim().split(/\s+/); 
} 

Test Case:

// case: split(' '); 
    console.log(" firstName lastName".split(' ')); 
    // result: ["", "", "", "firstName", "", "", "", "lastName"] 

    // case: split(/\s+/) 
    console.log(" firstName lastName".split(/\s+/)); 
    // result: ["", "firstName", "lastName"] 

    // case: .trim().split(/\s+/) 
    console.log(smartSplit(" firstName lastName")); 
    // result: ["firstName", "lastName"] 

Полный метод: же, как smartSplit за исключением того, что ожидает Array в качестве параметра вместо String

function smartSplitAll (strArr) { 
    var newArr = []; 

    for (var i = 0; i < strArr.length; i++) { 
    // expecting string array 
    var str = strArr[i].trim(); 

    // split the string if it has multiple words 
    if (str.indexOf(' ') > -1) 
     newArr = newArr.concat(str.split(/\s+/)); 

    else 
     newArr.push(str); 
    } 

    return newArr; 
} 

console.log(smartSplitAll(["firstName lastName", "anotherString"]); 
// result: ["firstName", "lastName", "anotherString"] 

Код живет здесь: http://jsfiddle.net/8xgzkz16/

+0

Не говоря уже о том, что неплохо вызвать переменную 'Array' и передать массив функции и вызвать параметр' string' ... – Christoph

+0

@ Кристоф работает над этим редактированием прямо сейчас –

+1

'string' не является зарезервированным словом , 'String' однако is;) (Технически это не так, потому что вы можете использовать это слово как имя переменной, это, однако, сломает некоторую funcitonality) – Christoph

1

Индекс [0] на самом деле является первым символом строки.

ли это:

var myString = "My Name"; 
var splitResult = myString.split(" "); 

будет приводить:

["My", "Name"] 
0

Вы могли бы сделать что-то вроде этого, используя метод разделения от объекта String

var newFun = function(string) { 
    return string[0].split(" "); 
} 

Voilà !

+0

ли этот код возвращает массив? – RcodeNFL

+0

Действительно. Функция split возвращает массив строк, разделенный по символу, переданному в параметре. Поэтому, если у меня есть строка '' Я действительно люблю яблоко'' и разделил ее с помощью символа пробела 'myStr.split (" ")' он вернет это '[" Я "," действительно "," любовь "," яблоко «]' – RPDeshaies

0

Вы можете использовать метод Строка разделения:

function splitString(input) { 
    return input.split(" "); 
} 
0

Несколько замечаний по вашему коду:

1) функция, которую вы ищете String.prototype.split:

var string = "firstName lastName"; 
string.split(" "); 
// returns an array: ["firstName","lastName"] 

2) дону 't вызываем ваш массив Array. Это «зарезервированное слово» * для прототипа Array! Вы переписываете прототип, если вы это сделаете!

3) Не забудьте присвоить имена вашим параметрам. Таким образом, вы избегаете ошибок, как в вашем коде. Передача массива и вызов строки параметров - плохая идея. string[0] возвращает первый символ строки, array[0] - первый элемент вашего массива. Кроме того, следует назвать функцию соответствующим образом.

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

var array = ["firstName lastName" , "anotherString"]; 

function returnSplitString(string){ 
    return string.split(" "); 
} 

var splitStringArray = returnSplitString(array[0]); 

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

0

Этот разделитель будет принимать любые массивы со смешанной строкой (строки с пробелами и без пробелов) и разбивать их на линейный массив.

var splitter = (array) => { 
return array.reduce((acc, value) => { 
    return /\s/.test(value) ? acc.concat(value.trim().split(' ')) : acc.concat(value) ; 

}, []); 
} 


console.log(splitter(["There is proper space", "ThereIsNoSpace"])); 

выведет: ['There', 'is', 'proper', 'space', 'thereisnospace']

Смежные вопросы