修改方法从那里完成从数组额外逗号中删除空字符串

时间:2013-11-29 19:40:35

标签: javascript arrays node.js

我已尝试过stackoverflow上的所有过滤器和方法。我原来的输出是

Human,,,

现在使用此方法后

function removingEmptyString(array)
{
    var item = "";

    for( var i = 0; i < array.length; i++)
    {
        if(array[i] == "" || array[i] == null)
        {
            array.splice( i, 1 );

        }
    }

    return array;
}

我的输出是

Human,

我的代码中有什么错误,我仍然收到最后一个逗号?

for (var index in output)
            {
                if (opt.options.showEmpty != true)
                {
                    var check = arrayIsEmpty(output[index]);

                    if ( check == true )
                        {
                            continue;
                        }
                    else
                        {
                        var array = removingEmptyString(output[index]);

                        //console.log(index + "\t" + array);
                        //var array = arr(output[index]);

                        console.log(index+ "\t" + array);
                        //console.log(index+ "\t" + output[index]);
                        }
                }

2 个答案:

答案 0 :(得分:3)

看到For循环不能按预期工作,你循环遍历数组,当条件匹配时,你正在拼接该索引上的元素,但for循环继续递增,所以只有下一个检查索引,但是splice方法已经将数组减少了一个索引,因此,“”元素现在位于已经循环的索引中。

你需要做的是在条件匹配时减小i值,这样循环将再次遍历索引。希望有所帮助。

function removingEmptyString(array)
{
    var item = "";

    for( var i = 0; i < array.length; i++)
    {
        if(array[i] == "" || array[i] == null)
        {
            array.splice( i, 1 );
            //decrement the index
            i--;

        }
    }

    return array;
}

答案 1 :(得分:0)

除非您确实需要改变数组,否则应使用filter方法。它比splice索引更简单,而且你想要做的更清楚。

尝试

array = array.filter(function (el) {
    return typeof el === "string" && !!el && !/\s+/.test(el);
});