我已尝试过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]);
}
}
答案 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);
});