javascriptのindexOfの検索の落とし穴
配列内の特定の要素だけを消したい。と言う事がある。
例えばだがチェックボックスや要素をクリックした際にイベントが発火して、その要素を消したい。等で仮定する。
## 仮に要素自体は一旦配列に入った状態だとする。 var youso = [1,2,3,4,5,6,7];
この配列の中から4だけ消したい。とした場合
youso.splice(youso.indexOf(3),1));
spliceで要素番号を消す。と言う形で完結するのだが、問題はこれが変数だった場合。
var fuga = 2; youso.splice(youso.indexOf(fuga),1));
この場合、要素番号2の1が消去されてほしい期待値となるのだが消えない。
firefoxのデバッガーでも何気なく数値を入れると動くのにfugaだと期待通りの配列にはならない。
様々なリファレンスやナレッジで確認すると
var youso = ["りんご","メロン","アボガド","ドラゴンフルーツ"];
等の文字列での検索ではうまくいっているが、これが数値の場合に関してあまり記載がない。
ここで疑ったのはjavascriptの型、結論から言うとちゃんと宣言すべきであった。
var fuga = 2; youso.splice(youso.indexOf(String(fuga)),1));
検索文字列は数値ですよ、と明示する事で期待通りの挙動をしてくれた。
結構忘れやすいのでメモ。