2014-04-18 120 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謝謝。 –