LoginSignup
8
8

More than 5 years have passed since last update.

jQuery.inArray() ≒ Array.prototype.indexOf()

Last updated at Posted at 2012-10-31

jQuery.inArray()をてっきり値が配列内にあるかどうかの論理値を返すメソッドかと思っていたら、インデックス数を返すメソッドで、ECMA5Array.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) {
    // 処理
}

以上メモでした。

8
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8