-
【JavaScript】右側のどの要素よりも大きい要素だけを抽出したサブ配列を返す方法
今回は、数値の配列を受け取り、その中から「自分より右側にあるすべての要素よりも大きい」要素だけを抜き出してサブ配列として返すJavaScript関数を作成します。 例えば、配列 [12, 45, 6, 4, 23, 23, 21, 1] を見てみましょう。 45、23、21、1 の4つの要素は、それぞれの位置から右側を見ても、自分より大きな値が存在しません。一方、12 の右側には 45 があるため条件を満たしません。よって期待される結果は [1, 21, 23, 45] となります。 実装のアプローチ この問題は、配列を右から左へ走査しながら「それまでに見つかった最大値」を記録していくことで
-
JavaScriptで文字列内に最初に重複する文字のインデックスを求める方法
JavaScriptでは、文字列を引数として受け取り、その中で2回目以降に出現する(=重複している)最初の文字のインデックスを返す関数を作成できます。重複する文字がひとつも存在しない場合は、-1 を返す仕様とします。例として、次のような文字列を考えてみましょう。const str = Hello world, how are you;この文字列の場合、最初に重複するのは「l」という文字です。「l」はインデックス 2 で初めて出現し、続くインデックス 3 でもう一度現れます。したがって、この関数は 2 を返す必要があります。アルゴリズムの考え方この問題を効率よく解くには、Map オブジェクトを使
-
JavaScriptで文字列をスネークケースに変換する方法
本記事では、文字列を受け取ってスネークケース(snake case)に変換するJavaScript関数の実装方法を解説します。スネークケースとは?スネークケースとは、文字列中のスペースをアンダースコア「_」に置き換え、すべての単語を小文字で表記する書き方のスタイルです。主にプログラミングにおける変数名やファイル名などでよく利用されています。例えば、「This is a simple sentence」という文字列は、スネークケースに変換すると「this_is_a_simple_sentence」になります。実装例以下が実際のコードです。 { return acc.concat(
-
JavaScriptで文字列内の各文字から最も近い母音までの距離を求める方法
少なくとも1つの母音を含む文字列を受け取り、文字列内の各文字ごとに「最も近い母音までの距離」を表す数値へマッピングした配列を返すJavaScript関数を作成してみましょう。 問題の例 例として、次のような文字列が与えられたとします。 const str = vatghvf; この場合、期待される出力は以下の配列になります。 const output = [1, 0, 1, 2, 3, 4, 5]; 最初の文字「v」は母音「a」(インデックス1)との距離が1、2番目の文字「a」は母音そのものなので距離0となり、以降の文字も同様に最も近い母音からの距離が順に格納されます。 実装コード この関数は
-
JavaScriptで数値の最大桁を求める再帰関数の実装方法
概要JavaScriptでは、引数として受け取った数値の中から最大の桁(いちばん大きい数字)を返す再帰関数を書く必要がある場合があります。たとえば、数値が 45654356 の場合、含まれる数字は 4・5・6・5・4・3・5・6 なので、その中で最も大きい数字は 6 です。したがって、この関数の戻り値は 6 になるべきです。コード例この処理を実装したコードは以下のとおりです。 { if(num){ const max = Math.max(num % 10, greatest); return greatestDigit(Math.floor(num /
-
JavaScriptで2次元配列の同じ位置の要素を合計する方法
JavaScriptでは、配列の中にさらに配列が入った「2次元配列」を扱うことがあります。本記事では、このような2次元配列を受け取り、各サブ配列の同じ位置(インデックス)にある要素同士を合計した新しい配列を返す関数の実装方法を解説します。問題の概要例として、次のような2次元配列があるとします。[ [43, 2, 21], [1, 2, 4, 54], [5, 84, 2], [11, 5, 3, 1] ]期待される出力各インデックスごとに要素を合計すると、結果は次のようになります。0番目:43 + 1 + 5 + 11 = 601番目:2 + 2 + 84 +
-
JavaScriptで数値配列の絶対値の合計を求める方法
JavaScriptで、正の数と負の数が混在する配列を受け取り、そのすべての要素の絶対値の合計を返す関数を作成する方法を解説します。今回はMath.abs()などの組み込みライブラリ関数を使わずに実装するのがポイントです。問題の概要例として、次のような配列が与えられた場合を考えてみましょう。const arr = [1, -5, -34, -5, 2, 5, 6];期待される出力この場合、各要素の絶対値(1 + 5 + 34 + 5 + 2 + 5 + 6)を合計した結果が出力されればOKです。58実装コードそれでは、この関数のコードを見ていきましょう。 { let res = 0;
-
JavaScriptで文字列の各文字を次のアルファベットに置き換える方法
文字列を受け取り、文字列内のすべての英字を、それぞれ「次のアルファベット」に置き換えた新しい文字列を返すJavaScript関数を作成してみましょう。 要件の確認 たとえば、次のような文字列が入力された場合: const str = how are you; 期待される出力 結果は以下のようになります: const output = ipx bsf zpv; ご覧のとおり、すべての英字が1文字ずつ後ろにシフトされています(h→i、o→p、w→x など)。一方、スペースなど英字以外の文字はそのまま維持されます。 実装のポイント charCodeAt() を使って各文字の文字コード(Unicod
-
JavaScriptで文字列の各文字をn回繰り返す方法
本記事では、文字列と数値 n を引数として受け取り、元の文字列に含まれるすべての文字をそれぞれ n 回繰り返した新しい文字列を返す JavaScript 関数の作成方法を解説します。 要件の確認 たとえば、次のような文字列が与えられたとします。 const str = how are you ここで繰り返し回数 n が 2 の場合、期待される出力は次のとおりです。 出力 const output = hhooww aarree yyoouu ポイントは、空白などの記号も1文字として扱い、すべての文字を均等に繰り返すことです。 実装コード それでは、この関数のコードを見ていきましょう。ここでは
-
JavaScriptで文字列から欠落している文字を見つける方法
文字列の長さが m で、その中に英アルファベットの最初の m 文字が含まれているとします。しかし何らかの理由で、そのうちの 1 文字が文字列から欠落してしまい、実際には m-1 文字しか含まれていない状態になっています。このような文字列を引数として受け取り、欠落している 1 文字を返す関数を JavaScript で作成していきましょう。実装のアプローチこの問題は、アルファベットの各文字(a 〜 z に対応する文字コード 97 〜 122)を順番にチェックし、文字列に含まれていない最初の文字を見つけることで解決できます。具体的には、以下の手順で処理を行います。関数の一貫性を高めるため、受け取っ
-
JavaScriptで数値配列を偶数・奇数に分けて昇順ソートする方法
JavaScriptで数値の配列を受け取り、偶数をすべて昇順で先に並べ、その後に奇数をすべて昇順で並べるような関数を作成する必要があります。 入力例と期待される出力 たとえば、入力配列が以下だった場合を考えてみましょう。 const arr = [2, 5, 2, 6, 7, 1, 8, 9]; この場合、出力は次のようになります。 const output = [2, 2, 6, 8, 1, 5, 7, 9]; それでは、この関数を実装していきましょう。 実装コード { arr.sort(sorter); }; oddEvenSort(arr); console.log(arr);
-
JavaScriptでバケットソートを実装する方法を解説!サンプルコード付き
バケットソート(Bucket Sort)は、サイズnの配列を、特定の値の範囲を持つk個の「バケット(bucket)」と呼ばれるグループに分割することで動作するソートアルゴリズムです。 その後、各バケットは別のソートアルゴリズムを使って個別に整列されます。この際、入力データの規模に応じて最適なソートアルゴリズムを選択できるのが特徴です。 このアルゴリズムの手順は以下のように説明できます。 アルゴリズムの流れ 1. 初期の bucketSort 関数を作成する 2. i、min、max、バケットサイズ用の変数を用意する 3. 最小値と最大値を求める 4. バケットの数を決定する 5. 各値を適切
-
JavaScriptで文字列から重複する単語のみを抽出する方法
文字列を引数として受け取り、元の文字列の中で2回以上出現した単語のみを含む新しい文字列を返すJavaScript関数を作成する必要があります。例入力文字列が以下の場合:const str = this is a is this string that contains that some repeating words;出力期待される出力は次のとおりです:const output = this is that;この例では、「this」「is」「that」がそれぞれ複数回出現しているため、これらの単語だけが結果に残ります。それでは、この関数のコードを書いてみましょう。実装例コードは以下のとおりで
-
JavaScriptで二次方程式の解を実装する方法【判別式で実数解を判定】
本記事では、3つの数値(二次方程式における二次の項の係数・一次の項の係数・定数項)を引数として受け取るJavaScript関数の作成方法を解説します。この関数は、方程式が実数解を持つ場合はその解を返し、実数解が存在しない場合にはfalseを返す必要があります。二次方程式の解法の基本二次方程式 ax² + bx + c = 0 の解は、以下の解の公式から求めることができます。x = (-b ± √(b² − 4ac)) / 2aここで重要になるのが「判別式」と呼ばれる b² − 4ac の値です。判別式の符号によって、解の性質は次のように決まります。 0:異なる2つの実数解を持つ判別式 = 0:
-
JavaScriptで二分探索(バイナリサーチ)を使ってクエリを検索する方法
問題の概要 ソート済みのリテラル配列を第1引数に、検索したいクエリ値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は二分探索(バイナリサーチ)アルゴリズムを使用して、クエリが配列内に存在するかどうかを判定します。 存在する場合はそのインデックスを返し、存在しない場合は -1 を返します。 二分探索アルゴリズムとは 二分探索は、ソート済みの配列にのみ適用できる高速な探索手法です。まず配列の中央要素を調べ、目的の値と比較します。 中央の値がクエリと一致すれば、そのインデックスを返す 中央の値がクエリより小さければ、配列の後半だけを対象に再び探索する 中央の
-
JavaScriptで数値を最も近い2の累乗に四捨五入する方法
JavaScriptでは、数値を引数として受け取り、その数値に最も近い「2の累乗」を返す関数を求められることがあります。ビット演算やメモリサイズの計算など、さまざまな場面で役立つ処理です。例えば、入力された数値が 145 の場合を考えてみましょう。145 に最も近い 2^n(n は整数)の形で表せる数は 128(2^7)です。したがって、この場合の出力は 128 となります。実装コード以下がその実装例です。 { // 負の数には対応しないため、絶対値に変換 if(num < 0){ num *= -1; } let base = 1; w
-
JavaScriptで数値の各桁の位の値を求める方法
本記事では、正の整数を受け取り、その数の各桁の位の値(プレースバリュー)を配列として返す関数 splitNumber() をJavaScriptで実装する方法を解説します。やりたいことたとえば、入力として次のような数値が与えられた場合:const num = 1234;期待される出力は以下のようになります。出力例const output = [1000, 200, 30, 4];つまり、千の位・百の位・十の位・一の位それぞれの値を要素とした配列を作るわけです。それでは、実際にコードを書いていきましょう。再帰を使ったアプローチこの問題は、数値の各桁を先頭から順に処理していくため、再帰的なアプロー
-
JavaScriptで文字列からキーを持つオブジェクトを生成する方法
JavaScriptでは、文字列を引数として受け取り、その文字列に含まれるユニークな文字(重複しない一意の文字)をすべてキーとし、それぞれの値を 0 に初期化したオブジェクトを生成する関数が必要になることがあります。本記事では、そのような関数の実装方法をわかりやすく解説します。 やりたいことの確認 まず、関数は第一引数かつ唯一の引数として文字列を受け取り、次のような条件を満たすオブジェクトを返します。 キー:文字列内に出現する各ユニークな文字 値:すべて 0 に初期化 たとえば、入力文字列が以下の場合を考えてみましょう。 const str = hello world!; 期待される出力
-
JavaScriptで連続していない最初の数値のインデックスを見つける方法
今回は、配列を受け取り、その中で最初に連続性が崩れている数値のインデックスを返す関数をJavaScriptで作成します。ここで扱う配列は、すべての数値が公差1の等差数列(1ずつ増加する数列)になっているものとします。しかし、途中にこの規則から外れた数値が存在する場合があり、その違反している数値のインデックスを返す必要があります。もしすべての数値が完璧な順序で並んでいる場合は、-1を返します。問題のポイント隣り合う要素同士の差が必ず「1」になるという前提で配列を走査します。差が1以外になった箇所が、規則に違反する最初の要素です。最後まで違反が見つからなければ -1 を返します。実装コードそれでは
-
JavaScriptで文字数が偶数の単語だけを反転させる方法
本記事では、文字列を受け取り、その中に含まれる「文字数が偶数」の単語だけを反転させるJavaScript関数の作成方法を解説します。 処理の内容 たとえば、次のような文字列があるとします。 const str = This is an example string; この文字列の中で文字数が偶数になっているのは、以下の4つの単語です。 This is an string これらの単語のみを反転させ、奇数文字で構成される example はそのまま残します。 実装コード const str = This is an example string; const isEven = str =>