1

我有一个带有字符串的数组,如果字符串中没有写入任何内容,我想将其从数组中删除.splice()

不知何故,它不会得到所有空条目。如果一开始有 2 个空条目,它只会得到一个。

这是我的小提琴和代码:

stringArray = ["", "", "Banana"];

console.log('before stringArray.length: ' + stringArray.length);

for (var i = 0; i < stringArray.length; i++) {
    if (stringArray[i] === "") {
        stringArray.splice(i, 1);
        if (i > 0) i--;
    }
}

console.log('after stringArray.length: ' + stringArray.length);
4

2 回答 2

6

你必须向后循环,因为每次你splice,长度和索引都会改变:

for (var i = stringArray.length-1; i>=0; i--) {
    if(stringArray[i] === ""){
        stringArray.splice(i, 1);   
    }
}

替代解决方案Array.prototype.filter(文档页面为不支持此方法的旧浏览器提供了一个 shim):

stringArray = [ "","","Banana"]; 
var a = stringArray.filter(function(item) {
   return item !== '';
});
console.log(a);
于 2013-04-08T17:46:39.463 回答
2

另一种选择,当然是向后循环,是while循环:

var stringArray = ["", "", "", "Apple", "", "", "Banana", "", "", ""];

var i = stringArray.length;
while (i-- && (stringArray[i] !== "" || stringArray.splice(i, 1)));

console.log(stringArray);    // ["Apple", "Banana"]

演示:http: //jsfiddle.net/VEmAV/

于 2013-04-08T17:58:29.613 回答