2013-08-22 3 views
2

У меня есть массив строк.Использование сплайсинга с массивом строк

Я хочу ckhek, если в массиве есть только строки пробелов и удалить их.

С этой целью я написал следующий код, который обрезает пробелы, а затем следует удалять elemens с длиной = 0.

обивку работ, строка пробелов фактически из 0 legth (проверить это с предупреждением), но элементы не удаляются из массива.

Конечно, поисковые системы - это массив.

for (var i=0;i<searchterms.length;i++) 
     {  
     searchterms[i]=searchterms[i].trim(); 
     alert(searchterms[i]+" - "+searchterms[i].toString().length); 
     if (searchterms[i].toString().length = 0) 
      { 
      searchterms.splice(i,1); 
      } 
     } 

То же самое происходит, если я использую следующий код вместо:

for (var i=0;i<searchterms.length;i++) 
     {  
     tempterm=searchterms[i].trim(); 
     alert(tempterm+" - "+tempterm.toString().length); 
     if (tempterm.toString().length = 0) 
      { 
      searchterms.splice(i,1); 
      } 
     } 

Спасибо заранее.

ответ

0
if (searchterms[i].toString().length = 0) 

Вы выполняете задание (=) в если заявление, где оно должно быть сравнение (оператор равенства ==) вместо этого.

if (searchterms[i].toString().length == 0) 

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

Это также может быть сделано в более сжатой форме с использованием Array.prototype.filter

var searchTerms = ['asdf', '', 'ed', ' ', 'd##'];  
var newTerms = searchTerms.filter(function(e) { 
    return e.trim().length !== 0; 
}); 

console.log(newTerms); 

jsFiddle Demo

+0

Я попробовал сначала более простое решение, то есть, используя == вместо = (это была глупая ошибка!), Но я нашел неожиданная проблема: цикл did'nt работает в представлении более последовательного элемента нулевой длины в массиве. Я не могу понять, почему это произошло, но я решил проблему по-другому: я помещаю условие в другой цикл, который обрабатывает массив, чтобы игнорировать эти нежелательные элементы. – Beppe

+0

BTW, я также понял, что если вы обрабатываете строку с помощью searchterms = srchstr.split (""), и строка содержит более последовательные пробелы, результирующий массив содержит нулевые элементы вместо пробелов, как я полагал; например, результатом «william shakespeare» является william ,,, shakespeare NOT «william,,, shakespeare», сот, что нет необходимости подрезать что-либо (как вы понимаете, я не эксперт Javascript ...) – Beppe

0
var temp = Array(); 
var k=0; 

for (var i=0;i<searchterms.length;i++) 
{  
     if((searchterms[i].trim())!="" && searchterms[i].length>0) 
     { 
      temp[k] = searchterms[i]; 
      k++; 
     } 

} 

Temp будет содержать новый arrray

0

Попробуйте

var i = 0; 
while (i < searchterms.length) 
{ 
    if (searchterms[i].trim().length == 0) searchterms.splice(i, 1); 
    i++; 
} 
0

попробовать этот

Описание:

Javascript массив сращивание() метод изменяет содержимое массива, добавляя новые элементы, удаляя старые элементы. Синтаксис:

array.splice(index, howMany, [element1][, ..., elementN]); 

Вот деталь параметров:

**index :** Index at which to start changing the array. 

**howMany :** An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed. 

element1, ..., elementN : The elements to add to the array. If you don't specify any elements, splice simply removes elements from the array. 
Смежные вопросы