2011-03-17 66 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