2011-03-17 10 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演算子とスライスメソッドは両方とも値ではなくインデックスを取ります。即ちrows = ["1", "2"]より良いrows[0]が存在するので、trueを返し0 in rows、上記の例ではそう

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

として表現されることになります。

またはrows = ["1"]の場合1 in rowsは、rows[1]が存在しないためfalseを返します。 rows = ["1", "1"]の場合、rows[1]が存在するため、1 in rowsがtrueを返すので、それを削除します。私のオブジェクトのソリューションは、順序を保存しないことなどなど、あなただけのオブジェクトを使用して試みることができる

代わりの配列とプッシュし、....

var rows = {} 

...

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

注意それらが設定されているかどうかだけチェックします。あなたが注文を保つのをやめようとするならば、あなたはループしたりスクープしたりする必要があります。 –

関連する問題