2009-12-09 60 views
0

tl; dr;即使沒有我的解釋,你可以看下面的代碼和輸出,看看有什麼可疑的。 Splice返回它拼接的索引,但數據保留在數組中。Javascript splice not splicing

所以我有一個對象,它的鍵控幾乎就像一個數組(0,1,2,3 ...等)。每個對象鍵都有一個數組值。該數組是一個對象數組。下面是一個簡化的對象,顯示我的工作的基本結構:

obj = { 
    '1': [{},{},{},{}], 
    '2': [{},{},{},{}], 
    '3': [{},{},{},{}] 
}; 

我有一些代碼,需要拼接從這些陣列中的一個的數組索引(對象)中的一個。這是代碼,用控制檯記錄每件事情(我將在下面顯示輸出)。

console.log(indices_to_remove); 
for(j = 0; j < indices_to_remove.length; j++) { 
    console.log("i: " + i) 
    console.log('j: ' + j) 
    console.log(this._index); 
    console.log(this._index[i].splice(indices_to_remove[j], 1)); 
    console.log(this._index); 
} 

關於第二個「console.log(this._index);」的通知拼接的對象仍然是原始數組的一部分。我會假設this._index [2]現在會有一個更少的項目。另外,我要出去拼接指數0,但它返回指數1

下面是輸出: Console

因此,如果任何人有任何深入地瞭解我可能是做錯了,請說出來!

謝謝, 邁克

+1

認爲是JSON? – yoda 2009-12-09 07:46:14

+0

JSON是偉大的,但我現在無法真正重寫所有的東西來支持它。我的問題是,爲什麼拼接在這種情況下似乎出現故障。 – 2009-12-09 08:09:37

+0

@yoda:JSON與此有什麼關係? – 2009-12-09 09:22:39

回答

4

有很多在你所顯示的代碼所缺少的,所以我不得不做一些猜測。我跑這個代碼,它按預期工作:

var obj = { 
    '1': [{},{},{},{}], 
    '2': [{},{},{},{}], 
    '3': [{},{},{},{}] 
}; 

var indices_to_remove = [1]; 

var i = 1; 
alert(indices_to_remove); 
for(j = 0; j < indices_to_remove.length; j++) { 
    alert("i: " + i) 
    alert('j: ' + j) 
    alert(obj[i]); 
    alert(obj[i].splice(indices_to_remove[j], 1)); 
    alert(obj[i]); 
} 

但是,你應該考慮索引中刪除陣列中向後循環。當您刪除第一個項目時,第二個項目現在是第一個項目。如果您然後刪除第二個項目,這實際上是您刪除的第三個項目。