在javascript中根据逗号索引替换空格

时间:2016-04-13 12:21:33

标签: 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”]。总是错过最后一个标签。所以在这种情况下,tag12丢失了。

我想知道for循环中有什么问题,有人可以帮我解决吗?

这是alloccurrences函数

var allOccurrences = function(list,value){             var me =“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;
    };

3 个答案:

答案 0 :(得分:0)

为什么不使用javascript split功能? http://www.w3schools.com/jsref/jsref_split.asp

var array =(&#34; tag5,tag8,tag9,tag12,tag7&#34;)。split(&#34;,&#34;);

答案 1 :(得分: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;
}

答案 2 :(得分:0)

逗号的数量始终比项目数少一个。由于您循环使用逗号计数,因此结果总是比项目数少一个。 if语句的逻辑意味着你正在丢失最后一个项目。

你应该修改你的for循环以转到&lt; = commas.length,然后中间if转到i&lt; commas.length,最后的其他内容转到tag = video_tagslist.substring(逗号[i-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返回的假设。