「javascript inarray」で探している多くの方が本当に知りたいのは、
“配列に値が含まれるか?”
の正しい判定方法と、jQueryの$.inArrayの扱い、そして連想配列(=JavaScriptではオブジェクト)での存在チェックです。
ここでは、現場で迷いがちな分岐・落とし穴・代替まで徹底整理します。
少しでもご参考になれば幸いです!
Contents
結論(最短サマリ)

- プリミティブ値の配列なら、基本は**
Array.prototype.includes**(真偽値で扱いやすく、NaNも検出可)。 - 古い環境(IE)互換が要るなら、
indexOfや$.inArray(jQuery)を使用(NaNは不可)。必要なら**includesのポリフィル**を導入。 - オブジェクト配列は同一参照以外は判定できないため、
some/findIndexでプロパティ比較を自作する。 - 連想配列(オブジェクト)の「キーがあるか?」は
Object.hasOwn(新しめ)または**hasOwnProperty、もしくはin演算子**で。 - 検索回数が多いなら、
Set/Mapに変換してO(1) ルックアップへ高速化。
用語整理:「連想配列」はオブジェクト
- JavaScriptで「連想配列」という言い方をする場合、実体は**オブジェクト(
{})**です。 - 配列(
[])は0始まりの連番インデックスを持つ順序コレクション。 - キー→値で即時参照したいならオブジェクト/Map、順序と重複を持つ集まりなら配列。
まずはここから:配列の存在チェック(プリミティブ値)

includes(推奨)
- 使い方:
array.includes(value[, fromIndex])→ 真偽値を返す - 特徴:SameValueZero比較(
NaNも一致と判定、+0と-0も同一扱い) - 直感的でif文との相性が良い(
if (arr.includes('A')) { … })
indexOf / jQuery $.inArray
array.indexOf(value[, fromIndex])、$.inArray(value, array)→ 見つかった位置(>=0)/なければ -1===による厳密等価。NaNは一致しないif (arr.indexOf('A') !== -1) { … }のように書く
比較早見表
| 観点 | includes | indexOf | $.inArray(jQuery) |
|---|---|---|---|
| 返り値 | true/false | number(-1なし) | number(-1なし) |
| 比較方式 | SameValueZero(NaN検出可) | 厳密等価===(NaN不可) | 厳密等価===(NaN不可) |
| 対応環境 | ES2016+(IE不可) | 広い(IE含む) | jQueryの互換に依存 |
| 用途感 | 直感的・可読性高 | 互換性/旧環境 | 既存jQuery資産 |
「javascript includes 使えない」への対処

- IEなど旧環境では
includesが存在しない。 - 対処:
- ポリフィルを入れる(core-js等)
- 代わりに**
indexOf**で書く
- ビルド環境(Babel/TS)を使っているなら、ターゲットブラウザ設定とpolyfillsを確認。
連想配列(オブジェクト)の存在チェック
キーの存在(プロパティ所有)の確認
- 推奨:
Object.hasOwn(obj, key)(モダン) - 互換性重視:
obj.hasOwnProperty(key) - プロトタイプ連鎖まで含めるなら:
key in obj
ネスト(入れ子)確認の安全手順
- 存在チェック:
obj?.a?.b !== undefinedのようにオプショナルチェイニング - 「キーはあるが値が
undefined」と「キー自体がない」は別。所有確認ならObject.hasOwnを使う
配列の中のオブジェクト判定(「含まれる?」の正攻法)

同一参照の判定(同じインスタンスか)
arr.includes(objRef)は参照が同じならtrue、内容が同じ別インスタンスはfalse
中身(プロパティ)で判定
- 例:「idが42の要素があるか?」
arr.some(x => x.id === 42)→ 真偽値arr.findIndex(x => x.id === 42)→ 位置(なければ -1)
- 深い比較が必要であれば、キー選抜(IDやユニークキー)で判定する。完全なディープイコールはコスト高+要実装。
大量検索を速くする:Set/Mapへの転換
- 同じ集合に対して繰り返し「含まれる?」を行うなら、
Set- 初期化:
const set = new Set(arr) - 判定:
set.has(value)→ 平均O(1)
- 初期化:
- キー→値で即時参照なら**
Map**map.set(key, value)/map.get(key)/map.has(key)
よくある落とし穴と回避策
NaNが見つからない:indexOf/$.inArrayはNaNを検出できない → **includes**を使う- 大文字小文字・全角半角:事前に正規化(例:
toLowerCase()、normalize('NFKC')) - 部分一致:
includesは要素一致。要素内の文字列部分一致は、要素が文字列なら**some(s => s.includes('foo'))のように2段階**で - 未定義/空配列:ガードを入れる(
Array.isArray(arr) && arr.lengthを確認) - 配列とオブジェクトの取り違え:連想配列はオブジェクト。配列API(
includes等)を無理に当てない
Q&A よくある質問

javascript 連想配列 存在チェック
- キーがあるか:
Object.hasOwn(obj, 'key')(推奨)/'key' in obj(継承含む) - 値の内容で判定:
obj.key !== undefinedだと「存在するがundefined」と「存在しない」を区別できない場合がある。**所有確認はObject.hasOwn**で。
javascript 配列 存在チェック
- プリミティブ:
arr.includes(value)(IEはポリフィルorindexOf) - オブジェクト:
arr.some(x => 条件)/findIndex
javascript 含まれる 配列
- 等価判定はSameValueZeroの
includesが◎(NaNもOK)。 - 旧環境なら
indexOfで代替(NaN不可に注意)。
JavaScript includes
- 真偽値返却で書きやすい。**
fromIndex**も指定可(負数可)。 - IE非対応→ポリフィルか
indexOfで。
javascript includes 連想配列
- 連想配列=オブジェクト。
includesは配列用。 - キー存在は
Object.hasOwn、値の探索はObject.values(obj).includes(value)のように配列化してから(コスト注意)。
jquery inarray 連想配列
$.inArrayは配列向け(===比較、NaN不可)。- 連想配列(オブジェクト)のキー存在は**
Object.hasOwnやin**を使う。
javascript includes 使えない
- IEなど旧環境。ポリフィル導入、または
indexOf/$.inArrayに切り替え。
javascript 配列 存在チェック オブジェクト
- プロパティ条件で判定:
some/findIndex。 - ディープ比較は要件次第で自作。通常はID比較が現実的。
まとめ
- 配列の“含まれる?”=
includesが第一選択(NaN対応・真偽値で明快)。 - IE互換は
indexOf/$.inArray。 - オブジェクト配列は**
some/findIndexで条件判定**。 - **連想配列(オブジェクト)は
Object.hasOwn/hasOwnProperty/in**でキー存在。 - 繰り返し検索は**
Set/Map**化で高速に。仕様・比較方式(SameValueZero/===)の違いを理解して選ぶのがコツ。
参考リンク
- MDN: Array.prototype.includes
- MDN: Array.prototype.indexOf
- MDN: Array.prototype.some
- MDN: Array.prototype.findIndex
- MDN: Object.hasOwn
- jQuery API: $.inArray