jQuery.inArray()
をてっきり値が配列内にあるかどうかの論理値を返すメソッドかと思っていたら、インデックス数を返すメソッドで、ECMA5のArray.prototype.indexOf()
とほぼ同じ機能だった(厳密には違うので各ドキュメントを参照されたし)。
Array.prototype.indexOf()
はECMA5で定義された配列型のインスタンスメソッドで、残念ながらIE8などには対応していない。対応していないブラウザにもモンキーパッチ的にprototype拡張をすればなんとかなるけど(参考)、なるべくprototype汚染はしたくないし、jQueryを使っているならプラグインも必要ないわけだしそのままユーティリティ関数として使ったほうがいい。
// How to
jQuery.inArray(1, [1, 2, 3]); // => 0
jQuery.inArray(2, [1, 2, 3]); // => 1
jQuery.inArray(3, [1, 2, 3]); // => 2
jQuery.inArray(4, [1, 2, 3]); // => -1
ちなみにPHPでは有無の論理を返すのがin_array()
で、インデックス数を返すのがarray_search()
。
名前がややこしい。
注意は、値が含まれていない場合に-1
を返すので、暗黙的なfalse
にはならないということ。条件としてそのままは使えない。
// ダメな例
if (jQuery.inArray(needle, array)) {
// 処理
}
// 良い例
if (jQuery.inArray(needle, array) !== -1) {
// 処理
}
以上メモでした。