練習問題 — 「どのメソッドを使う?」クイズ(解答+解説付き)
学んだことを定着させるには問題を解くのが一番。以下は段階的に難しくなる 10問 のクイズです。
各問題は「どのメソッドを使うべきか(複数選択可)」を問います。まず自分で考えてから解答と解説を読んでください。最後に「使い分けの早見表」も付けます。
問題1(超基本)
配列 ['red','green','blue'] に 'green' が含まれているかだけを調べたい。どのメソッドを使う?
A. indexOf('green')
B. includes('green')
C. find(u => u === 'green')
解答・解説
正解:B(includes)(A も可だが B が最もシンプル)
includes()は存在チェックに最適でtrue/falseを返します。indexOf()でも可能(!== -1)ですが読みやすさでincludesが推奨。
const arr = ['red','green','blue'];
console.log(arr.includes('green')); // true
JavaScript問題2(位置が欲しい)
配列 ['a','b','c','b'] で 'b' が最初に出るインデックスを知りたい。どれを使う?
A. indexOf('b')
B. lastIndexOf('b')
C. findIndex(x => x === 'b')
解答・解説
正解:A または C(どちらでも)
indexOf('b')が一番シンプル。findIndex(x => x==='b')でも同じ結果になります。lastIndexOfは最後に出る位置を返すので不適。
const arr = ['a','b','c','b'];
console.log(arr.indexOf('b')); // 1
JavaScript問題3(最後に出る位置)
['x','y','x','z'] で 'x' が最後に出る位置を知りたい。どれ?
A. indexOf('x')
B. lastIndexOf('x')
C. findIndex(x => x === 'x')
解答・解説
正解:B(lastIndexOf)
lastIndexOfは右側から検索して最後に現れる位置を返します。
const arr = ['x','y','x','z'];
console.log(arr.lastIndexOf('x')); // 2
JavaScript問題4(オブジェクトを条件で探す)
ユーザー配列 [{name:'A',age:17},{name:'B',age:21}] で 最初に age >= 20 の人 のオブジェクトを取り出したい。どれ?
A. includes()
B. find(u => u.age >= 20)
C. indexOf({name:'B',age:21})
解答・解説
正解:B(find)
- 条件でオブジェクトを探す場合は
find(要素そのものを返す)。indexOfはオブジェクトの参照一致しか見ないので使えない。
const users = [{name:'A',age:17},{name:'B',age:21}];
console.log(users.find(u => u.age >= 20)); // {name: "B", age: 21}
JavaScript問題5(条件の「位置」を知りたい)
同じ users 配列で 年齢 >= 20 の最初の人のインデックス を知りたい。どれ?
A. find()
B. findIndex(u => u.age >= 20)
C. indexOf(u => u.age >= 20)
解答・解説
正解:B(findIndex)
findIndexは条件に合う要素のインデックスを返します。indexOfは値(===)比較のみなのでコールバックは取れません。
console.log(users.findIndex(u => u.age >= 20)); // 1
JavaScript問題6(NaNの検出)
配列 [NaN] で NaN が含まれているか確かめたい。どれを使う?
A. indexOf(NaN)
B. includes(NaN)
C. find(x => Number.isNaN(x))
解答・解説
正解:B または C(A は不可)
indexOf(NaN)は-1を返す(NaN === NaNが false)。includes(NaN)はtrue(ES6仕様)。またfind(x => Number.isNaN(x))でも検出可。
console.log([NaN].includes(NaN)); // true
console.log([NaN].find(x => Number.isNaN(x))); // NaN
JavaScript問題7(重複除去)
配列 [1,2,1,3] から 重複を取り除きたい。indexOf を使った方法の意図はどれか?
A. arr.filter((v,i,self) => self.indexOf(v) !== i)
B. arr.filter((v,i,self) => self.indexOf(v) === i)
C. arr.find(v => self.indexOf(v) === i)
解答・解説
正解:B
filterの中で「その値が配列の最初に現れた位置と今の位置が同じ」なら最初の出現なので残す。A は逆で重複だけ残してしまう。
const arr = [1,2,1,3];
const uniq = arr.filter((v,i,self) => self.indexOf(v) === i); // [1,2,3]
JavaScript問題8(真偽値 vs 要素)
「配列に条件を満たす要素が1つでもあるかどうか(true/false)」を調べたい。どれが適切?
A. find()
B. some()
C. includes()
解答・解説
正解:B(some)
someは条件に合うものがあればtrueを返す。find()はその要素自体を返す(存在の真偽は!!find(...)で取れるがsomeが直感的)。
const users = [{age:10},{age:30}];
console.log(users.some(u => u.age >= 20)); // true
JavaScript問題9(複雑な条件での存在チェック)
「名前が ‘Taro’ かつ age >= 18 のユーザーがいるか」を素早く調べたい。推奨は?
A. users.find(u => u.name === 'Taro' && u.age >= 18)
B. users.some(u => u.name === 'Taro' && u.age >= 18)
C. users.includes({name:'Taro', age:18})
解答・解説
正解:B(some) が読みやすく直感的。A(find) も使える(true/false が必要なら !! を付ける)。C はオブジェクト参照比較なので不可。
console.log(users.some(u => u.name === 'Taro' && u.age >= 18)); // true/false
JavaScript問題10(選択問題:最適なメソッドを選べ)
あなたは次の処理をしたい:
「ユーザー配列から、スコアが 80 以上の最初のユーザーの インデックス を取得し、存在すればそのユーザーを削除する(splice を使う)」。どの組み合わせが最も適切?
A. findIndex() でインデックスを取得 → splice
B. find() で要素を取得 → indexOf で位置を取得 → splice
C. includes() で存在チェック → findIndex() → splice
解答・解説
正解:A(findIndex → splice) が簡潔で効率的。B は二度手間(オブジェクトが同一参照なら機能するが冗長)。C は includes は値などの単純比較向けで無駄。
const idx = users.findIndex(u => u.score >= 80);
if (idx !== -1) users.splice(idx, 1);
JavaScript最後に:クイック早見表(覚えやすいまとめ)
includes(val)→ 存在チェック(true/false)indexOf(val)→ 値の最初の位置(インデックス)lastIndexOf(val)→ 値の最後の位置find(callback)→ 条件を満たす要素(そのもの)findIndex(callback)→ 条件を満たす要素の位置some(callback)→ 条件に合う要素があるか(true/false)
