パソコン関連

【JavaScript】inarray(=配列の「含まれる?」判定)の正解は?|includes/indexOf/$.inArrayの違いと連想配列(オブジェクト)存在チェック、配列の中のオブジェクト判定、IE対策・高速化まで完全ガイド

「javascript inarray」で探している多くの方が本当に知りたいのは、

“配列に値が含まれるか?”

の正しい判定方法と、jQueryの$.inArrayの扱い、そして連想配列(=JavaScriptではオブジェクト)での存在チェックです。

ここでは、現場で迷いがちな分岐・落とし穴・代替まで徹底整理します。

少しでもご参考になれば幸いです!


結論(最短サマリ)

  • プリミティブ値の配列なら、基本は**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) { … } のように書く

比較早見表

観点includesindexOf$.inArray(jQuery)
返り値true/falsenumber(-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/$.inArrayNaNを検出できない → **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 含まれる 配列

  • 等価判定SameValueZeroincludesが◎(NaNもOK)。
  • 旧環境ならindexOfで代替(NaN不可に注意)。

JavaScript includes

  • 真偽値返却で書きやすい。**fromIndex**も指定可(負数可)。
  • IE非対応→ポリフィルかindexOfで。

javascript includes 連想配列

  • 連想配列=オブジェクトincludes配列用
  • キー存在Object.hasOwn値の探索Object.values(obj).includes(value) のように配列化してから(コスト注意)。

jquery inarray 連想配列

  • $.inArrayは配列向け(===比較、NaN不可)。
  • 連想配列(オブジェクト)のキー存在は**Object.hasOwnin**を使う。

javascript includes 使えない

  • IEなど旧環境。ポリフィル導入、またはindexOf/$.inArrayに切り替え。

javascript 配列 存在チェック オブジェクト

  • プロパティ条件で判定:some/findIndex
  • ディープ比較は要件次第で自作。通常はID比較が現実的。

まとめ

  • 配列の“含まれる?”=includesが第一選択NaN対応・真偽値で明快)。
  • IE互換indexOf/$.inArray
  • オブジェクト配列は**some/findIndexで条件判定**。
  • **連想配列(オブジェクト)Object.hasOwn/hasOwnProperty/in**でキー存在。
  • 繰り返し検索は**Set/Map**化で高速に。仕様・比較方式(SameValueZero/===)の違いを理解して選ぶのがコツ。

参考リンク

Pick up

1

2022年5月3日頃より、一部のInstagramユーザーの間で、アプリを起動すると突然 「生年月日を追加」 という生年月日の入力を強制する画面が表示されるケースが急増しているようです。 この影響で、 ...

2

スマホでGoogle検索を利用しようとした際に、検索キーワードの候補として、 検索履歴ではなく「話題の検索キーワード」が表示される場合がありますよね。 この「話題の検索キーワード」に表示される検索キー ...

3

不在連絡かのような内容のSMS 「お客様が不在の為お荷物を持ち帰りました。こちらにてご確認ください http:// ~」 がまたまた届きました。 このメール、またまた増加しているようです。 ...

-パソコン関連