2014-04-18 47 views
0
for(var i = 0; i < this.phrases.length; i++) { 
    console.log('sort ' + this.phrases[i]); 
    console.log('sort length' + this.phrases.length); 
    if(this.phrases[i] == null) { 
     var s = this.phrases.splice(i, 1); 
     console.log('splice ' + this.phrases[i]); 
     console.log('splice length ' + this.phrases.length); 
    } 
} 

我有一个数组(this.phrases)。我在另一节中提出了要删除等于空的短语。第一个日志打印null,第二个日志也打印null。为什么它没有拼接?这有时也是数组中的最后一项。你是否无法仅用一个元素拼接一个数组?同样的事情发生,但如果它不是this.phrases的最后一项。JavaScript splice()不起作用

编辑:s似乎也没有设置为任何值。

编辑:我添加的两个长度日志打印相同的数字。

编辑:这不是真的。奇怪的事情正在发生,可能不涉及这部分代码。我只想知道我是否正确使用splice()。

+3

当一个元件与'.splice()'移除,则数组的元素的其余部分向下移动的指标,但无论这些变化如何,我都会继续递增。 –

+0

但似乎什么都没有拼接。数组前后具有相同数量的元素。 – michaelAdam

+0

'length'应该改变一些,但是如果不调整'i'来反击'i ++',循环可能不会删除每个'null'。 http://jsfiddle.net/7UWew/与http://jsfiddle.net/Q55nr/。你也可以使用['.filter()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),只要你不需要'.splice()'的突变方面。 http://jsfiddle.net/7nmpE/ –

回答

0

交换机以下两行:

var s = this.phrases.splice(i,1); 

console.log('splice ' + this.phrases[i]); 

向该:

console.log('splice ' + this.phrases[i]); 

this.phrases.splice(i, 1); 

i--; 
+0

注意方法名称中的'p'。 ['.splice()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)是一种增变方法。 –

+0

我不希望this.phrases等于拼接的东西,我希望它等于拼接后剩下的数组。 – michaelAdam

+0

对不起,我与片断混淆了。 @JonathanLonowski谢谢。 –