Javascript .splice()不';我不能完全缩短我的数组

Javascript .splice()不';我不能完全缩短我的数组,javascript,arrays,splice,Javascript,Arrays,Splice,我有一个带有字符串的数组,如果字符串中没有写入任何内容,我想使用.splice()将其从数组中删除 不知何故,它并没有得到所有的空条目。如果开头有两个空条目,则只得到一个 这是我的密码: stringArray = ["", "", "Banana"]; console.log('before stringArray.length: ' + stringArray.length); for (var i = 0; i < stringArray.length; i++) { i

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

不知何故,它并没有得到所有的空条目。如果开头有两个空条目,则只得到一个

这是我的密码:

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);
stringArray=[“”、“”、“香蕉”];
console.log('stringArray.length之前:'+stringArray.length);
对于(var i=0;i0)i--;
}
}
console.log('在stringArray.length之后:'+stringArray.length);

必须向后循环,因为每次拼接时,长度和索引都会发生变化:

for (var i = stringArray.length-1; i>=0; i--) {
    if(stringArray[i] === ""){
        stringArray.splice(i, 1);   
    }
}
替代解决方案(文档页面为不支持此方法的旧浏览器提供了一个垫片):


您必须向后循环,因为每次
拼接
,长度和索引都会发生变化:

for (var i = stringArray.length-1; i>=0; i--) {
    if(stringArray[i] === ""){
        stringArray.splice(i, 1);   
    }
}
替代解决方案(文档页面为不支持此方法的旧浏览器提供了一个垫片):


当然,另一个向后循环的选项是
while
循环:

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

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

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

演示:

另一个选项,当然是向后循环,是使用
循环:

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

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

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

演示:

我喜欢这个,尽管它很难阅读。如果用分号替换
{}
,它可能会更短。@bfavareto哈哈,谢谢。是的,难读是我所期望的,不喜欢,但很有效。很明显,它可以分解成一个正常的
,而
循环是可读的,但我只是想找出一个有趣的1.5行程序。好的一点是,我总是忘记,
{}
并不总是需要这样,尽管很难阅读。如果用分号替换
{}
,它可能会更短。@bfavareto哈哈,谢谢。是的,难读是我所期望的,不喜欢,但很有效。很明显,它可以分解成一个正常的
,而
循环是可读的,但我只是想找出一个有趣的1.5行程序。好的一点是,我总是忘记,
{}
并不总是必需的