2013-04-13 4 views
1

Я пытаюсь создать программу, которая хранит слова в массиве, то, что я сделал, - это то, что программа находит разделитель («» или «,»), он толкает его в массив, моя проблема заключается в том, что он хранит даже разделители с ним (я должен использовать массив SEPARATORS).Как удалить пробелы в массиве?

var sentence = prompt(""); 

var tab = []; 

var word = "" ; 

var separators = [" ", ","]; 

for(var i = 0 ; i< sentence.length ; i++){ 

    for(var j = 0 ; j < separators.length ; j++){ 

    if(sentence.charAt(i) != separators[j] && j == separators.length-1){ 

      word += sentence.charAt(i); 

     }else if(sentence.charAt(i) == separators[j]){ 

      tab.push(word); 
      word = ""; 

     } 

    } 

} 

tab.push(word); 
console.log(tab); 

ответ

2

Я просто использовать бы регулярное выражение:

var words = sentence.split(/[, ]+/); 

Если вы хотите, чтобы исправить свой код, используйте indexOf вместо for цикла:

for (var i = 0; i < sentence.length; i++) { 
    if (separators.indexOf(sentence.charAt(i)) === -1) { 
     word += sentence.charAt(i); 
    } else { 
     tab.push(word); 
     word = ""; 
    } 
} 
+0

i работает отлично !! – mike10101

3

Вы можете попробовать это:

var text = 'Some test sentence, and a long sentence'; 
var words = text.split(/,|\s/); 

Если вы не хотите, пустые строки:

var words = text.split(/,|\s/).filter(function (e) { 
    return e.length; 
}); 
console.log(words); //["some", "test", "sentence", "and", "a", "long", "sentence"] 

Если вам нужно использовать массив, который вы можете попробовать это:

var text = 'Some test sentence, and a long sentence', 
    s = [',', ' '], 
    r = RegExp('[' + s.join('') + ']+'), 
    words = text.split(r); 
+0

'.filter' не требуется. Просто убедитесь, что ваше регулярное выражение является жадным: '[, \ s] +'. – Blender

+0

да, он работает с методом split, но я должен использовать свой массив (separators = ["", ","];) – mike10101

+0

Попробуйте это: 'var r = new RegExp ('[' + s.join ('') + ']'); ' –

0

После пересматривают эту проблему, я думаю, вам нужно сочетание родной строки функции и compact method from the excellent underscore library, который удаляет записи «ложь» в массиве:

$('#textfield).keyup(analyzeString); 
var words; 
function analyzeString(event){ 
    words = []; 
    var string = $('#textfield).val() 
    //replace commas with spaces 
    string = string.split(',').join(' '); 
    //split the string on spaces 
    words = string.split(' '); 
    //remove the empty blocks using underscore compact 
    _.compact(words); 
} 
+0

Не могли бы вы объяснить, как это означает разделение предложений на слова? – Blender

+0

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

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