JavaScriptで文字列内の各文字から最も近い母音までの距離を求める方法
少なくとも1つの母音を含む文字列を受け取り、文字列内の各文字ごとに「最も近い母音までの距離」を表す数値へマッピングした配列を返すJavaScript関数を作成してみましょう。
問題の例
例として、次のような文字列が与えられたとします。
const str = 'vatghvf';
この場合、期待される出力は以下の配列になります。
const output = [1, 0, 1, 2, 3, 4, 5];
最初の文字「v」は母音「a」(インデックス1)との距離が1、2番目の文字「a」は母音そのものなので距離0となり、以降の文字も同様に最も近い母音からの距離が順に格納されます。
実装コード
この関数は、まず文字列中のすべての母音のインデックスを収集し、その後各文字について最も近い母音インデックスとの絶対差を計算するという流れで実装できます。
const str = 'vatghvf';
const nearest = (arr = [], el) => arr.reduce((acc, val) => Math.min(acc, Math.abs(val - el)), Infinity);
const vowelNearestDistance = (str = '') => {
const s = str.toLowerCase();
const vowelIndex = [];
for(let i = 0; i < s.length; i++){
if(s[i] === 'a' || s[i] === 'e' || s[i] === 'i' || s[i] === 'o' || s[i] === 'u'){
vowelIndex.push(i);
};
};
return s.split('').map((el, ind) => nearest(vowelIndex, ind));
};
console.log(vowelNearestDistance(str));
コードの解説
- vowelNearestDistance関数: 文字列を小文字に正規化した後、forループで「a」「e」「i」「o」「u」のいずれかに一致する文字の位置(インデックス)をvowelIndex配列に記録します。
- nearest関数: reduceを使用して、対象位置とすべての母音インデックスとの差の絶対値の中から最小値を求めます。初期値をInfinityとしているため、必ず実際の最小距離が返されます。
- 最後にsplit('')で文字列を1文字ずつ分解し、mapによって各文字の最寄り母音までの距離を計算した新しい配列を生成して返します。
出力結果
コンソールには以下のように表示されます。
[
1, 0, 1, 2,
3, 4, 5
]
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで配列内の要素がすべて一意(ユニーク)かどうかをチェックする方法
JavaScriptで、数値の配列を引数として受け取り、その配列に含まれるすべての数値が一度だけ出現する(=重複が一切ない)場合には true を、そうでない場合には false を返す関数を作成してみましょう。問題の例たとえば、次のような入力配列が与えられたとします。const arr = [12, 45, 6, 34, 12, 57, 79, 4];この場合、期待される出力は次のとおりです。const output = false;これは、数値 12 が配列内に2回出現しているためです。indexOf と lastIndexOf を使った実装例この問題は、各要素に対して indexOf()