-
JavaScriptで配列から一意の要素(重複なし)だけを抽出する方法
配列の中に同じ値が複数回登場する場合、「一度だけしか出現しない要素」だけを取り出したいケースはよくあります。この記事では、そのような処理をJavaScriptの関数として実装する方法を解説します。 やりたいこと リテラルの配列を受け取り、その中で重複していない要素のみを含む新しい配列を返す関数を作成します。 たとえば、次のような配列が与えられたとします。 const arr = [9, 5, 6, 8, 7, 7, 1, 1, 1, 1, 1, 9, 8]; この配列では 7、1、9、8 が複数回出現しています。一方、5 と 6 は一度しか登場しません。したがって、期待される出力は次のようにな
-
「-」記号を使わずにJavaScriptで2つの数値の差を求める方法
本記事では、マイナス(-)記号を一切使用せずに、2つの数値の差(引き算の結果)を返すJavaScript関数の実装方法を解説します。アプローチ:ビット演算を活用する「-」演算子が使えない場合でも、ビット演算を組み合わせることで減算を実現できます。鍵となるのは次の2つの演算です。XOR(^):借り(ボロー)を考慮しない減算結果を一時的に得るNOT(~)とAND(&):必要な借りを計算し、1ビット左シフトして次のステップへ渡すこの処理を再帰的に繰り返し、借りがなくなる(第2引数が0になる)まで続けることで、最終的な差を求められます。コード例以下がその実装コードです。const num1 =
-
【JavaScript】文字列内の各単語から最後の母音を削除する方法
はじめに JavaScriptでは、文字列を受け取り、各単語の最後の母音(a・e・i・o・u)を取り除いた新しい文字列を返す関数を作成する課題によく出会います。本記事では、その実装方法を具体的なコード例とともにわかりやすく解説します。 期待される動作の例 たとえば、次のような文字列が入力された場合を考えてみましょう。 const str = This is an example string; このとき、期待される出力は次のとおりです。 const output = Ths s n exampl strng; 各単語(This、is、an、example、string)から、それぞれ最後に登場
-
ポーカーの最高ペアカードを返すJavaScript関数の実装方法
はじめに本記事では、ポーカープレイヤーがランダムに引いた5枚のカードを表す、ちょうど5つの要素を持つ配列を受け取る関数をJavaScriptで実装する方法を解説します。要件5枚のカードの中に少なくとも1組のペアが含まれる場合、その中で最も高いペアのカード番号を返す(ペアが1組しかない場合はそのカードを返す)。ペアが存在しない場合は false を返す。具体例たとえば、次のような配列が与えられたとします。const arr = [A, Q, 3, A, Q];この場合、「A」と「Q」の2組のペアが存在します。カードゲームでは A は Q よりも強いため、関数は次のように「A」を返す必要があります
-
【JavaScript】プログレッシブ配列(1文字ずつ成長する文字列の並び)を判定する方法
問題概要 長さの昇順に並べられた文字列の配列を受け取るJavaScript関数を作成します。この関数は、隣接するすべての文字列ペアについて、後ろの文字列が前の文字列の先頭または末尾に1文字を追加して作れるものである場合に true を返し、1つでも条件を満たさないペアが存在すれば false を返します。 たとえば、次の配列が与えられたとしましょう。 const arr = ["c", "ca", "can", "acan", "acane", "dacane"]; この配列
-
JavaScriptで文字列内の冗長文字の数を数える方法
課題JavaScriptで、文字列を引数として受け取り、その文字列に含まれる冗長文字(重複して出現する文字)の総数を返す関数を作成します。たとえば、次のような文字列の場合:const str = abcde;すべての文字が一度しか登場しないため、出力は 0 になります。一方、次のような文字列の場合:const str = aaacbfsc;「a」が2回余分に出現し、「c」が1回余分に出現しているため、出力は 3 になります。解決のアプローチこの問題は、lastIndexOf() メソッドを使うと簡潔に解決できます。文字列内の各文字について、現在のインデックスと、その文字が最後に出現するインデッ
-
JavaScriptで配列内のすべての数値の桁を昇順に並べ替える方法
問題の概要数値の配列を受け取り、配列内のすべての数値の桁を特定の順序(この記事では昇順とします)で並べ替えるJavaScript関数を作成します。各数値は内部的に桁を入れ替えるだけで、配列の要素の順序自体は変えません。例たとえば、次のような配列が与えられた場合を考えてみましょう。const arr = [543, 65, 343, 75, 567, 878, 87];この場合、期待される出力は次のとおりです。const output = [345, 56, 334, 57, 567, 788, 78];出力結果を見ると、各数値の桁が昇順に並べ替えられていることがわかります。たとえば「543」は
-
JavaScriptで半素数を判定する方法|素因数分解を使ったチェック関数の実装
本記事では、引数として受け取った数値が半素数(semiprime)であるかどうかを判定するJavaScript関数の実装方法を解説します。半素数とは半素数とは、2つの素数の積として表される特殊な合成数のことです。例えば、6(= 2×3)、10(= 2×5)、15(= 3×5)、77(= 7×11)などが半素数に該当します。また、同じ素数同士の積、つまり素数の2乗も半素数として扱われます。4(= 2×2)、9(= 3×3)、25(= 5×5)などがその例です。判定アルゴリズムの考え方ある数が半素数かどうかを調べるには、その数を素因数分解し、素因数の個数がちょうど2つになるかを確認します。小さい数
-
【JavaScript】文字列の一意な文字を配列にマッピングする方法
JavaScriptで、文字列を受け取り、その各文字を0から始まる連番にマッピングする関数を作成してみましょう。ルールはシンプルです。初めて登場した文字(重複していない文字)に出会うたびにカウントを1つ増やし、すでに登場したことのある文字には同じ番号を割り当てます。 問題の例 たとえば、次のような文字列が与えられたとします。 const str = heeeyyyy; この場合、期待される出力は以下のとおりです。 const output = [0, 1, 1, 1, 2, 2, 2, 2]; 結果を見ると、「h」には0、「e」には1、「y」には2が割り当てられており、同じ文字が続く間は同じ番
-
JavaScriptで文字列(スペースを含む)から2番目に出現頻度の高い文字を取得する方法
本記事では、スペースを含む文字列を受け取り、その中で2番目に多く出現する文字を返すJavaScript関数の作成方法を解説します。 基本的な考え方はシンプルです。まず各文字の出現回数をオブジェクトでカウントし、次に出現回数の降順で並べ替えて、その2番目の要素を取り出します。 実装コード const str = Hello world, I have never seen such a beautiful weather in the world; const secondFrequent = str => { const map = {};
-
JavaScriptで2つの文字列を2文字ずつ交互に結合する方法
今回求められているのは、2つの文字列を受け取り、最初の文字列から2文字、次に2番目の文字列から2文字、また最初の文字列から…という具合に交互に文字を取り出して、新しい文字列を作成して返すJavaScript関数です。 たとえば、入力が次の2つの文字列だったとします。 const str1 = Hello world; const str2 = How are you btw; このとき、期待される出力は次のようになります。 const output = HeHollw o arwoe rlyodu btw; 実装コード それでは、この関数を実際にコードにしてみましょう。 const str1
-
JavaScriptで文字列内の2番目に短い単語の長さを検索する方法
本記事では、文字列を唯一の引数として受け取り、その中で2番目に短い単語の長さを返すJavaScript関数の作成方法を解説します。問題の概要例えば、次のような文字列が与えられた場合を考えてみましょう。const str = This is a sample string;この文字列に含まれる単語のうち、最も短いのは「a」(長さ1)であり、2番目に短いのは「is」(長さ2)です。したがって、期待される出力は 2 となります。実装コード以下が実際のコードです。 { const strArr = str.split( ); if(strArr.length < 2){
-
【JavaScript】2つの配列を結合して連続した数列が作れるか判定する方法
本記事では、2つの数値配列を受け取り、それらを組み合わせて「連続した数列(等差数列)」を構成できるかどうかを判定するJavaScript関数の実装方法を解説します。 要件の整理 この関数は、引数として2つの数値配列を受け取ります。そして、両方の配列の要素をすべて結合し、任意の順序に並べ替えたときに連続した数列が作れる場合は true を、作れない場合は false を返します。 たとえば、次のような配列が与えられたとします。 const arr1 = [4, 6, 2, 9, 3]; const arr2 = [1, 5, 8, 7]; この2つの配列を結合して昇順に並べると「1, 2, 3,
-
JavaScriptで配列内の各データ型の出現回数を数える方法
はじめに本記事では、異なるデータ型の要素が混在する配列を受け取り、各データ型ごとの出現回数をMapオブジェクトとして返すJavaScript関数の作成方法を解説します。例として、次のような配列を考えてみましょう。const arr = [23, df, undefined, null, 12, { name: Rajesh }, [2, 4, 7], dfd, null, Symbol(*), 8];この配列には、数値・文字列・undefined・null・オブジェクト・配列・シンボルなど、さまざまなデータ型が含まれています。これらをtypeof演算子で判定し、Mapを使って集計してい
-
JavaScriptで数の素数階乗(プリモリアル)を求める方法
素数階乗(プリモリアル:primorial)とは、ある数 n に対して、最初の n 個の素数をすべて掛け合わせた値のことです。素数階乗の計算例例えば、n = 4 の場合を見てみましょう。このとき、primorial(n) の出力は以下のようになります。2 * 3 * 5 * 7 = 210つまり、最初の4つの素数「2、3、5、7」を掛け合わせた 210 が答えとなります。実装のポイント今回は、数値を引数として受け取り、その素数階乗を返す JavaScript 関数を作成します。実装には以下のステップが必要です。isPrime関数: 与えられた数が素数かどうかを判定する補助関数primorial
-
【JavaScript】配列の先頭と末尾から要素をペアにして取り出す方法
今回は、数値や文字列のリテラルを格納した配列を受け取り、新たな配列の配列(ネストされた配列)を返すJavaScript関数を作成します。各サブ配列には、ちょうど2つの要素、つまり「先頭からn番目の要素」と「末尾からn番目の要素」が対になるように含まれます。要件の確認例えば、次のような配列があったとします。const arr = [1, 2, 3, 4, 5, 6];この場合、期待される出力は以下の通りです。const output = [[1, 6], [2, 5], [3, 4]];実装のポイント配列の長さが偶数の場合は、すべての要素をきれいにペアにできます。一方、長さが奇数の場合は中央の要
-
【JavaScript入門】Dateオブジェクトで今日からn日後の曜日を求める方法
課題の概要 JavaScriptで、数値 n を唯一の引数として受け取る関数を作成することを考えます。 この関数は、まず Date オブジェクトを使って今日の曜日を取得し、n日後が何曜日になるかを返します。 具体例 今日が月曜日で n = 2 の場合、出力は次のようになります。 Wednesday サンプルコード { // getDay() の戻り値(0:日曜 〜 6:土曜)に対応する配列 const weekday = [ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,
-
JavaScriptでランダムな名前(英小文字列)を生成する関数の作り方
本記事では、数値 n を引数として受け取り、アルファベット小文字(a〜z)のみで構成された長さ n のランダムな文字列を返す JavaScript 関数を作成します。ユーザー名やテストデータの生成など、さまざまな場面で活用できる基本的なテクニックです。 サンプルコード それでは、実際のコードを見てみましょう。 const num = 8; const randomNameGenerator = num => { let res = ; for (let i = 0; i < num; i++) { // 0〜25 のランダムな整数を生成
-
JavaScriptで配列のシャッフル強度をチェックする方法
数値の配列において、隣り合う2つの要素が昇順の連続した関係になっていない箇所がどれだけ存在するかによって、シャッフルの強度を測ることができます(ここでは昇順の場合のみを扱います)。隣接する要素の中に昇順のペアがひとつも存在しなければ100%シャッフルされた状態であり、逆にすべてのペアが昇順に並んでいれば0%シャッフルされた状態といえます。長さnの配列には、元の順序を崩さずに見たとき、隣接する要素のペアがn-1個存在します。そこで本記事では、数値の配列を受け取り、その配列のシャッフル強度を表す0〜100の範囲の数値を返すJavaScript関数を作成します。サンプルコード以下が実際のコードです。
-
JavaScriptで指定した数値より大きい最初の素数を求める方法
本記事では、数値を引数として受け取り、その数値より大きい最初の素数を返すJavaScript関数の実装方法を解説します。例えば、入力された数値が 24 の場合、24より大きい最初の素数は 29 となるため、出力は 29 になります。実装の考え方この問題は、以下の2つの処理を組み合わせることでシンプルに解決できます。素数判定関数(isPrime):与えられた数値が素数かどうかを判定する探索関数(nearestPrime):対象の数値を1ずつ増やしながら、素数が見つかるまで判定を繰り返すコード例以下が実際のコードです。const num = 24; // 素数かどうかを判定する関数 const