2016-04-13 3 views
0

Я получил некоторые проблемы в замене пространства Вот мой кодЗаменить пробел по индексу запятых в JavaScript

var getTags = function(video_tagslist) 
{ 
    var commas = _.allOccurrences(video_tagslist, ','); 

    if (!_.array(commas)) 
    { 
     // goback? 
     return; 
    } 

    var tagList = []; 
    for (var i = 0; i < commas.length; i++) 
    { 

     var tag = ""; 
     if (i == 0) { 
      tag = video_tagslist.substring(0, commas[i]); 
     } else if (i < commas.length-1) { 
      tag = video_tagslist.substring(commas[i-1]+1, commas[i]); 
     } else { 
      tag = video_tagslist.substring(commas[i]+1); 
     } 

     tag = _.trim(tag); 
     tagList.push(tag); 
    }; 

    return tagList; 
} 

allOccurrences() является функцией, которая может вернуть все индекс запятых в video_taglist.

Но когда я тестирую его, он всегда пропускает некоторые теги внутри. Например, если я даю строку = "tag5, tag8, tag9, tag12, tag7" вот так. Результат получится ["tag5", "tag8", "tag9", "tag7"]. всегда пропускают последние, но только теги. поэтому в этой ситуации тег 12 отсутствовал.

Интересно, что что-то не так в цикле for, может ли кто-нибудь помочь мне исправить это?

Вот alloccurrences функцию

вар allOccurrences = функция (список, значение) { вар мне = "Utils :: allOccurrences";

 if (!utils.array(list) && !utils.string(list)) { 
      log.error(me, "Given list is not an array or string"); 
      return null; 
     } 

     if (utils.string(list) && !utils.string(value)) { 
      log.error(me, "Unable to search for a non string value in a string"); 
      return null; 
     } 

     if (utils.string(list) && utils.string(value) && utils.empty(value)) { 
      log.warn(me, "Unable to search for an empty string in a string"); 
      return []; 
     } 

     var startIndex = 0; 
     var index  = -1; 
     var indices  = []; 

     var listLen  = list.length; 

     while ((index = list.indexOf(value, startIndex)) > -1) { 
      indices.push(index); 
      startIndex = index + 1; 
     } 

     return indices; 
    }; 
+0

Извините, в этом примере я даю string = tag5, tag8, tag9, tag12, tag7. пробел отсутствовал между каждым тегом. –

+0

и замена пространства на самом деле работает, просто всегда отсутствует последний, но один тег .. чувствую себя раздражающим сейчас .. –

+0

Можете ли вы поделиться «allOccurrences», а также –

ответ

0

Количество запятых всегда на единицу меньше количества предметов. Поскольку вы перебираете количество запятых, ваш результат всегда будет на единицу меньше количества элементов. Логика ваших утверждений if означает, что вы теряете следующий последний элемент.

следует изменить свой цикл, чтобы перейти к < = commas.length, то средний, если идет в я < commas.length, а окончательное еще идет помечать = video_tagslist.substring (запятые [я-1] + 1);

for (var i = 0; i <= commas.length; i++) { 
     var tag = ""; 
     if (i == 0) { 
      tag = video_tagslist.substring(0, commas[i]); 
     } else if (i < commas.length) { 
      tag = video_tagslist.substring(commas[i-1]+1, commas[i]); 
     } else { 
      tag = video_tagslist.substring(commas[i-1]+1); 
     } 

     tag = _.trim(tag); 
     tagList.push(tag); 
    }; 

Все это основано на предположении о том, что возвращает allOccurrences.

+0

Большое спасибо .. он работает сейчас .. –

+0

, пожалуйста, выберите его как правильный ответ :) –

0

Почему бы не использовать функцию javascript split? http://www.w3schools.com/jsref/jsref_split.asp

var array = ("tag5, tag8, tag9, tag12, tag7"). Split (",");

+0

ах .. теперь, я должен использовать этот способ для решения, я буду попробуйте это позже –

+0

ok, pls upvote, если это работает для вас –

0

является _ библиотека подчёркивания?

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

var getTags = function(video_tagslist) { 
    var tagList = = video_tagslist.split(','); 
    for(var i=0; i<tagList.length; i++) { 
     tagList[i] = _.trim(tagList[i]); 
    } 
    return tagList; 
} 
+0

no .. itś not underscore, _ is utils i defined. и allOccurrences() - это функция, определенная в другом классе –

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