JavaScript - 配列の検索

配列の検索

配列内の要素を検索する方法のひとつは indexOf を使う方法です。indexOf は、指定した値に厳密に等しい要素を持つ最初の添字を返します。lastIndexOf は、同様に最後の添字を返します。配列の一部だけを検索対象にしたい場合は開始位置を指定します。indexOf あるいは lastIndexOf-1 を返した場合、見つからなかったことを示します。

const o = { name: "foo" };
const arr = [1, 5, "a", o, true, 5, [1, 2], "9"];

console.log(arr.indexOf(5));               // 1
console.log(arr.lastIndexOf(5));           // 5
console.log(arr.indexOf("a"));             // 2
console.log(arr.lastIndexOf("a"));         // 2
console.log(arr.indexOf({ name: "foo" })); // -1
console.log(arr.indexOf(o));               // 3
console.log(arr.indexOf([1, 2]));          // -1
console.log(arr.indexOf("9"));             // 7
console.log(arr.indexOf(9));               // -1
console.log(arr.indexOf("a", 5));          // -1
console.log(arr.indexOf(5, 5));            // 5
console.log(arr.lastIndexOf(5, 4));        // 1
console.log(arr.lastIndexOf(true, 3));     // -1
indexOf / lastIndexOf メソッド

findIndexindexOf と似ていますが、比較に用いる関数を指定することができます。また、検索を開始する添字の指定や最終要素から検索するメソッドはありません。

const arr = [{ id: 5, name: "bar" }, { id: 7, name: "foo" }];

console.log(arr.findIndex(o => o.id === 5));       // 0
console.log(arr.findIndex(o => o.name === "foo")); // 1
console.log(arr.findIndex(o => o === 3));          // -1
console.log(arr.findIndex(o => o.id === 17));      // -1
console.log(arr.findIndex(o => o.id === 7));       // 1
findIndex メソッド

要素の添字が必要な場合、indexOffindIndex を使用します。添字ではなく要素自体が必要な場合、find を使用します。findIndex と同様に、比較に用いる関数を指定できます。要素が見つかった場合は要素自体を返し、見つからなかった場合は undefined を返します。

const arr = [{ id: 5, name: "bar" }, { id: 7, name: "foo" }];

console.log(arr.find(o => o.id === 5)); // { id: 5, name: 'bar' }
console.log(arr.find(o => o.id === 2)); // undefined
find メソッド

findfindIndex に指定する関数には、要素の添字と配列全体も引数として渡すことができます。これにより例えば、ある添字以降の要素で整数の 2 乗になっている数を返すといったことができます。

const arr = [1, 17, 16, 5, 4, 16, 10, 3, 49];

console.log(arr.find((x, i) => i > 2 && Number.isInteger(Math.sqrt(x)))); // 4
console.log(arr.find((x, i) => i > 5 && Number.isInteger(Math.sqrt(x)))); // 49
find メソッド

また、配列内に特定の要素があるか確認するために someevery のメソッドが用意されています。

some は指定の条件を満たす要素が見つかった場合 true を返し、それ以外は false を返します。

const arr = [5, 7, 12, 15, 17];

console.log(arr.some(x => x%2===0)); // true
console.log(arr.some(x => Number.isInteger(Math.sqrt(x)))); // false
some メソッド

every は配列の全要素が指定の条件を満たすときに trueを返し、それ以外は false を返します。ただし、条件を満たさない要素が見つかった時点で false を返すので、全要素がチェックされる保証はありません。

const arr = [4, 6, 16, 36];

console.log(arr.every(x => x%2===0)); // true
console.log(arr.every(x => Number.isInteger(Math.sqrt(x)))); // false
every メソッド

関連記事

JavaScript のまとめページはプログラミング JavaScript 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
22
Shares:
0
Tag:
JavaScript