JavaScriptで特定の文字で始まる単語を配列から検索する方法
JavaScriptでは、文字列の配列を第1引数として受け取り、単一の文字を第2引数として受け取る関数を作成することが求められるケースがあります。
この関数は、第2引数で指定された文字で始まる、配列内の最初の要素を見つけ出し、そのインデックスを返す必要があります。該当する要素が存在しない場合は -1 を返すのが一般的です。
実装例
以下のコードは、forループで配列を先頭から順に走査し、各要素の先頭1文字が指定された文字と一致するかどうかを判定する、最も基本的な実装です。
const names = ['Naman', 'Kartik', 'Anmol', 'Rajat', 'Keshav', 'Harsh', 'Suresh', 'Rahul'];
const firstIndexOf = (arr = [], char = '') => {
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(el.substring(0, 1) === char){
return i;
};
};
return -1;
};
console.log(firstIndexOf(names, 'K'));
console.log(firstIndexOf(names, 'R'));
console.log(firstIndexOf(names, 'J'));出力結果
コンソールには次のように表示されます。
1 3 -1
コードのポイント
el.substring(0, 1)で各文字列の先頭1文字を取り出し、===演算子で指定文字と厳密に比較しています。- 一致する要素が見つかった時点でインデックスを返すため、無駄なループ処理が発生しません。
- 比較は大文字・小文字を区別します。たとえば 'k' と 'K' は別の文字として扱われるため注意が必要です。
- 最後まで一致する要素が見つからなかった場合は
-1を返します。
findIndex() を使ったより簡潔な書き方
ES6以降で使える Array.prototype.findIndex() メソッドを利用すると、同じ処理を1行でスマートに記述できます。
const firstIndexOf = (arr = [], char = '') => arr.findIndex(el => el.charAt(0) === char); console.log(firstIndexOf(names, 'K')); // 1 console.log(firstIndexOf(names, 'R')); // 3 console.log(firstIndexOf(names, 'J')); // -1
findIndex() は条件を満たす最初の要素のインデックスを返し、見つからなければ -1 を返します。今回の要件にぴったり合致しており、可読性・保守性の観点からも手書きのループよりも推奨される方法です。
-
JavaScriptで指定した間隔(ギャップ)を持つ2つの素数のペアを見つける方法
問題 数値 gap を第一引数として、また2つの数値からなる範囲配列を第二引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在し、かつ絶対差が gap と一致する素数のペアを見つけて返すものです。 例えば、gap = 4、範囲が [20, 200] の場合、「37」と「41」はどちらも素数であり、その差はちょうど4であるため、条件を満たすペアとなります。 解決のアプローチ この問題は以下のステップで解決できます。 素数判定: 与えられた数が素数かどうかを判定するヘルパー関数を用意します。 素数の収集: 指定された範囲内のすべての素数を配列に
-
Pythonで特定の文字で始まるリスト要素を検索する方法
この記事では、Pythonのリストから「特定の文字で始まる要素」だけを抽出する方法を、2つの異なるアプローチで解説します。 方法1:インデックスとlower()を組み合わせる まず紹介するのは、lower()関数とインデックス([0])を組み合わせる方法です。lower()を使うことで、大文字・小文字を区別せずに比較できるのがポイントです。リスト内包表記の中で各要素の先頭文字(インデックス0)を取り出し、テスト用の文字と照合します。 サンプルコード listA = [Mon, Tue, Wed, Thu] # 比較に使う文字 test = T # 元のリストを表示 print(Given