JavaScriptで配列に特定の値が含まれるか調べる方法(includes)を実行して学べます。 下のコードはブラウザ内でそのまま実行できます。「実行エディタで開く」を押すと、progoのオンラインJavaScript実行環境にコードが読み込まれ、その場で動作を確認できます。
const fruits = ["apple", "banana"];
console.log(fruits.includes("banana")); // true
console.log(fruits.indexOf("cherry")); // -1
▶ このコードを実行エディタで開く
includes()は真偽値(true / false)を返すので、そのままifで使えます。indexOf()は位置(無ければ-1)を返します。位置も知りたいときはこちら。includes()はNaNを正しく判定できますが、indexOf()はできません。const arr = [1, 2, 3];
arr.includes(2); // true … 値が入っているか
arr.indexOf(2); // 1 … 位置も欲しい
arr.some(n => n > 2); // true … 条件に合う要素があるか
arr.find(n => n > 2); // 3 … 条件に合う要素そのもの
includes()は参照が一致しないと使えないため、some()を使います。
const users = [{id:1,name:"A"}, {id:2,name:"B"}];
users.some(u => u.id === 2); // true
users.find(u => u.id === 2); // {id:2, name:"B"}
const tags = ["Apple", "Banana"];
const q = "apple";
tags.some(t => t.toLowerCase() === q.toLowerCase()); // true
$.inArray(x, arr) は arr.indexOf(x) と同じ(見つからなければ -1)。存在確認だけなら arr.includes(x) に置き換えます。
ループの中で何度も存在確認するなら、配列よりSetの方が高速です。
const set = new Set(hugeArray);
set.has("target"); // 配列.includes より速い
includesはtrue/false、indexOfは位置(無ければ-1)。存在確認だけならincludes、NaNの判定もincludesのみ可能です。
some()を使います(例: users.some(u => u.id === 3))。要素自体が欲しいならfind()。
arr.includes(x)(真偽値)またはarr.indexOf(x)(位置)。