「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