我认为将一个值“切换”为数组的简单任务。
我想要做的是添加行(如果它不存在)并删除它是否存在:
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”被添加为第一个元素并且从未被删除??
答案 0 :(得分: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;
}