-
JavaScriptで配列のfalsy(偽値)インデックスに要素を挿入する方法
概要 本記事では、pushAtFalsy() という配列関数を作成する方法を解説します。この関数は、配列と挿入したい要素を引数として受け取り、配列内で最初に見つかったfalsy(偽値)のインデックス位置へその要素を挿入します。 JavaScriptにおけるfalsyな値とは、null、undefined、false、0、NaN、空文字列など、真偽値の評価でfalseとみなされる値のことです。また、疎な配列に含まれる「空スロット(ホール)」も同様に扱われます。 もし配列内に挿入先となる空きスペースが存在しない場合は、要素を配列の末尾に追加します。 実装の考え方 処理の流れは以下の通りです。 ま
-
JavaScriptで配列の隣接する2つの要素を一度に合計する方法
今回は、数値の配列を受け取り、元の配列から隣り合う2つの要素を順に足し合わせた合計値を要素とする新しい配列を返すJavaScript関数を作成する方法を解説します。 処理の概要 例えば、次のような入力配列があったとします。 const arr = [3, 6, 3, 87, 3, 23, 2, 2, 6, 8]; この場合、期待される出力は以下のようになります。 3 + 6 = 9 3 + 87 = 90 3 + 23 = 26 2 + 2 = 4 6 + 8 = 14 つまり、出力は次の配列になります。 const output = [9, 90, 26, 4, 14]; 実装コード こ
-
JavaScriptで配列内の非負数の連続グループ(クラスター)を数える方法
JavaScriptで配列を扱う際、負の数と非負の数(0以上の値)が混在したデータの中から、「非負の数が連続しているブロック」の数を数えたい場面があります。本記事では、そのような処理を簡潔に実装する方法を解説します。問題の概要たとえば、次のような数値の配列があるとします。const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];この配列の中から、0以上の数値が連続して並んでいるグループ(クラスター)を数える関数を作成します。上記の配列の場合を見てみましょう。インデックス3の「0」:単独ですが、これも1つのクラスターとしてカウントされます。インデックス9から配列
-
JavaScriptで文字列配列の共通要素(積集合)を効率的に求める方法
JavaScriptでは、2つの配列に共通して含まれる要素(積集合)を求めたい場面がよくあります。本記事では、2つの文字列配列を受け取り、その共通部分を計算して新しい配列として返す intersection() 関数の実装方法を解説します。結果の配列には、両方の配列に出現した回数だけ各要素を含める必要があります。順序は問いません。例:入力と期待される出力たとえば、以下のような入力があったとします。arr1 = [hello, world, how, are, you]; arr2 = [hey, world, can, you, rotate];この場合、出力は次のようになります。Output
-
JavaScriptで配列をn個のサブ配列に均等に分割する方法
文字列や数値のリテラルを含む配列 arr を第1引数に、数値 n を第2引数として受け取る関数を作成することを考えてみましょう。 この関数は、各サブ配列が最大でも arr.length / n 個の要素を持つ、n 個のサブ配列からなる配列を返す必要があります。要素の振り分け方は以下のとおりです。 1番目の要素は1番目のサブ配列へ、2番目の要素は2番目のサブ配列へ、3番目の要素は3番目のサブ配列へ、というように順番に振り分けていきます。 すべてのサブ配列に1つずつ要素が入ったら、再び先頭のサブ配列から2つ目の要素を追加していきます。 同様に、すべてのサブ配列が2つの要素を揃えてから、初めて先頭
-
JavaScriptで配列内の重複した値を合計して一意化する方法
本記事では、重複する要素を含む数値の配列を受け取り、同じ値を持つ要素をすべて合計して1つの要素にまとめるJavaScript関数の作成方法を解説します。 例えば、入力配列が次のようになっているとします。 const input = [1, 3, 1, 3, 5, 7, 5, 4]; この場合、期待される出力は次のとおりです。 const output = [2, 6, 10, 7, 4]; つまり、重複している「1」は合計されて先頭のインデックスに配置され、重複している「3」はその次のインデックスに、というように処理されます。出力配列では、各一意の値が「値 × 出現回数」という形で1つずつ並ぶ
-
【JavaScript】lengthとループを使わずに配列の中央要素を取得するES6再帰関数の書き方
はじめに 本記事では、配列の length プロパティにアクセスすることなく、for 文や while 文などのループ構文も一切使わずに、配列の中央にある要素を返す関数 midElement() をJavaScriptで実装する方法を解説します。ループの代わりに再帰呼び出しを活用するのがポイントです。 実装の要件 配列の length プロパティを参照しないこと 組み込みのループ構文(for / while など)を使用しないこと 要素数が奇数の場合は、中央の1つの要素を返す 要素数が偶数の場合は、中央の2つの要素を格納した配列を返す サンプルコード const arr = [14, 3
-
JavaScriptで配列内の基準値より上・下の要素数を数える方法
本記事では、指定した数値を基準として、配列内の各要素がその値より「下(未満)」か「上(以上)」のどちらに該当するかをカウントする関数を、JavaScriptで作成する方法を解説します。まず、次のような数値の配列を用意します。const array = [54,54,65,73,43,78,54,54,76,3,23,78];例えば、基準値が60だった場合、「60未満」の要素は5つ存在します。54, 54, 43, 3, 23同様に、「60以上」の要素も5つ存在します。65, 73, 78, 76, 78実装コード実際のコードは以下の通りです。Array.prototype.reduce()を使
-
JavaScriptで2つの配列の差分(共通しない要素)を見つける方法
はじめにJavaScriptでは、2つの配列を比較して「片方にしか存在しない要素」を取り出したい場面がよくあります。例えば、以下のような2つの数値配列があったとします。const arr1 = [12, 54, 2, 4, 6, 34, 3]; const arr2 = [54, 2, 5, 12, 4, 1, 3, 34];この2つの配列には、両方に含まれる共通の要素(12、54、2、4、3、34)があります。一方で、arr1 にだけある要素は「6」、arr2 にだけある要素は「5」と「1」です。今回は、2つの配列を受け取って、どちらか一方にのみ存在する要素をすべて返す関数を作成します。実装
-
JavaScriptでAND演算子を使ってブール値配列をマージする方法
はじめにJavaScriptでは、複数のブール値(真偽値)の配列を1つにまとめたい場面がよくあります。例えば、次のような「配列の中に配列が入った」ブール値のデータを考えてみましょう。const arr = [[true,false,false],[false,false,false],[false,false,true]];この記事では、各サブ配列の対応する位置にある要素同士をAND(&&)演算子で結合し、結果を1次元配列として返す関数の作り方を解説します。実装のポイントこの処理には、配列を単一の値に畳み込むためのArray.prototype.reduce()メソッドを使うの
-
【JavaScript】n以下の素数をすべて配列で取得する方法
本記事では、数値 n を引数として受け取り、n 以下のすべての素数を格納した配列を返す JavaScript 関数の作成方法を解説します。たとえば、n が 24 の場合、期待される出力は次のとおりです。const output = [2, 3, 5, 7, 11, 13, 17, 19, 23];実装の考え方この処理は、次の2つのステップで構成されます。素数判定用の補助関数(isPrime):ある数が素数かどうかを判定する。2 から順に割り算を行い、途中で割り切れる数が現れた時点で素数ではないと判断します。メイン関数(primeUpto):3 から n までの各整数に対して isPrime を
-
JavaScriptで関数内の変数を別の関数から参照する方法を徹底解説
JavaScriptでは、関数内で宣言された変数はその関数のローカルスコープに属するため、外部から直接アクセスすることはできません。しかし、コンストラクタ関数やクロージャといった仕組みを活用すれば、別の関数やグローバル領域からこれらの変数へアクセスできるようになります。 本記事では、「2つの数値を加算する」というシンプルなタスクを実行する関数を例に、関数内で宣言された変数を外部から取得する具体的な方法を解説します。 実装例:this を使ったコンストラクタ関数 以下のコードでは、コンストラクタ関数内で this を使い、ランダム値と計算結果をインスタンス自身のプロパティとして割り当てています
-
JavaScriptで2つの配列の逆順和を求める方法
問題の概要JavaScriptで、同じ長さを持つ2つの数値配列を受け取る関数を作成する必要があります。この関数が返す配列のn番目の要素は、「1つ目の配列の先頭から数えてn番目の要素」と「2つ目の配列の末尾から数えてn番目の要素」の合計になるようにします。例えば、次のような2つの配列が与えられたとしましょう。const arr1 = [34, 5, 3, 3, 1, 6];const arr2 = [5, 67, 8, 2, 6, 4];この場合、期待される出力は以下のようになります。const output = [38, 11, 5, 11, 68, 11];実装コード以下が実際のコード例です
-
【JavaScript】文字列に埋め込まれた数値をすべて抽出する関数の作り方
JavaScriptには、文字列を数値に変換するparseInt()やparseFloat()といった標準関数が用意されています。しかし、これらのメソッドには弱点があります。数値が文字列の途中に埋め込まれている場合、先頭の連続した数字しか取得できません。 例えば、次のコードは「454」しか返しません。本来であれば「4545453」を取得したいところです。 parseInt(454ffdg54hg53) そこで本記事では、数字と文字が混在する文字列を受け取り、含まれるすべての数字を順に結合した数値を返すJavaScript関数を作成します。 実装例 以下がそのコードです。 { let
-
【JavaScript】文字列のASCIIスコア(合計値)を計算する方法
ASCIIコードとはASCII(アスキー)は7ビットで構成される文字コード体系であり、それぞれのビットパターンが一意の文字に対応しています。英字アルファベットのすべての文字には、固有の10進数のASCIIコードが割り当てられています。ここでは、文字列を引数として受け取り、その文字列を構成するすべての文字のASCIIコードの合計値を算出するJavaScript関数を作成します。実装例以下が実際のコードです。 { let res = 0; for(let i = 0; i < str.length; i++){ const num = str[i].charCode
-
JavaScriptで文字列内の単語を長さの昇順に並べ替える方法
今回は、文字列を受け取り、各単語を文字数(長さ)が短い順に並べ替えた新しい文字列を返すJavaScript関数を作成してみましょう。このような処理は、split()メソッドで文字列を単語ごとに分割し、sort()メソッドで長さを比較しながら並べ替え、最後にjoin()メソッドで再び結合することで簡単に実現できます。実装コード例以下が実際のコードです。 { return a.length - b.length; }); return sorted.join( ); }; console.log(arrangeByLength(str));コードの解説処理の流れは以
-
JavaScriptで0と1のバイナリ配列を並べ替える方法
0と1だけが含まれる数値の配列があるとしましょう。この配列を受け取り、すべての1を先頭に、0を末尾に移動させる関数をJavaScriptで実装する必要があります。 例えば、入力配列が次の場合 − const arr = [1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1]; 期待される出力は次のようになります − const output = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; コード例 以下がその実装コードです − const arr = [1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1]; const sortBinary =
-
【JavaScript】文字列を先頭と末尾から交互に取り出して等しい長さの部分文字列に分割する方法
今回は、文字列と整数 n の2つの引数を受け取り、文字列を n 個の「同じ長さの部分文字列」に分割した配列を返すJavaScript関数を作成します。なお、n は文字列の長さを割り切れる値である必要があります。 要件と考え方 各部分文字列の長さは「文字列の長さ ÷ n」で求めることができます。そして、各部分文字列は元の文字列の先頭の文字と末尾の文字を交互に取り出して構成します。 例えば、文字列が how、n が 3 の場合、出力は次のようになります。 [h, w, o]; この例では、各部分文字列はちょうど「(文字列の長さ / n) = 3 ÷ 3 = 1 文字」を含みます。まず先頭から h、
-
【JavaScript】2つの文字列の類似性を判定するマッチング関数の実装方法
はじめに本記事では、2つの文字列と数値 n を引数として受け取り、両者の文字構成の類似性を判定するJavaScript関数の実装方法を解説します。具体的には、以下のような仕様を持つ関数 deviationMatching を作成します。2つの文字列に含まれる文字が完全に一致していれば(順序は問わない)true を返す異なる文字があっても、その数が n 個以下であれば true を返す異なる文字が n 個を超える場合は false を返すコード例実際の実装コードを見てみましょう。const str = some random text; const str2 = some r@ndom text
-
【JavaScript】配列の偶数インデックスと奇数インデックスの要素合計の差を求める方法
今回は、数値の配列を受け取り、偶数番目のインデックスにある要素の合計と奇数番目のインデックスにある要素の合計との差を返すJavaScript関数を作成します。問題の例たとえば、次のような配列が与えられたとします。const arr = [3, 6, 34, 12, 6, 8, 8, 5, 6, 8];この場合、関数は以下のように計算した結果を返す必要があります。偶数インデックス(0, 2, 4, ...)の要素:3 + 34 + 6 + 8 + 6 = 57奇数インデックス(1, 3, 5, ...)の要素:6 + 12 + 8 + 5 + 8 = 39その差は「57 − 39 = 18」とな