2011-03-17 89 views
0

我有我認爲將一個值切換到數組的簡單任務。JS陣列切換推送和拼接

我想要做的就是添加行如果它不存在,並刪除它,如果它存在:

selected = new Array(); 

// repeated code 
if(row in selected===true) selected.splice(row); 
else selected.push(row); 

現在,這正常工作與第一個元素的數組中的例外,始終保持不變,顯然不被「選中」識別。

a) row = 1 > ["1"] 
b) row = 1 > ["1", "1"] 
c) row = 2 > ["1", "1", "2"] 
d) row = 2 > ["1", "1"] 
e) row = 1 > ["1"] 
f) row = 1 > ["1", "1"] 

使用上面的值和輸出,您可以看到「1」被添加爲第一個元素,並且從未刪除?

回答

4

in運算符和slice方法都採用索引而不是值。即rows = ["1", "2"]將得到更好的表達爲

rows = [] 
rows[0] = "1"; 
rows[1] = "2"; 

所以在上述例子中,0 in rows返回true,因爲rows[0]存在。

或者,在你的情況下,當rows = ["1"],1 in rows返回false,因爲rows[1]不存在。 然後當rows = ["1", "1"],1 in rows返回true,因爲rows[1]存在,所以你然後刪除它。等等等等

代替陣列,並推動,你可以使用對象嘗試只....

var rows = {} 

...

if(rows[selected]){ 
    rows[selected] = selected; 
} 
else{ 
    rows[selected] = null; 
} 
+0

請注意,我的目標解決方案將不保留順序的元素,只會檢查它們是否設置。如果你想保持秩序,你將不得不循環和舀。 – 2011-03-17 04:33:27