-
JavaScriptで日付を含む配列を昇順にソートする方法
JavaScriptでは、日付文字列と数値がペアになったデータを扱う場面は少なくありません。例えば、以下のような配列があったとします。const arr = [ [ 02/13/2015, 0.096 ], [ 11/15/2013, 0.189 ], [ 05/15/2014, 0.11 ], [ 12/13/2013, 0.1285 ], [ 01/15
-
JavaScriptで整然数(Tidy Number)を判定する方法を解説
整然数(Tidy Number)とは?整然数(Tidy Number)とは、各桁の数字が左から右へ非減少順(前の桁より小さくなる箇所がない並び)になっている数のことです。整然数の例489 → 整然数(4 ≤ 8 ≤ 9) 234557 → 整然数(2 ≤ 3 ≤ 4 ≤ 5 ≤ 5 ≤ 7) 34535 → 整然数ではない(5 → 3 で減少しているため)この記事では、引数として受け取った数値が整然数かどうかを判定するJavaScript関数を実装していきます。実装のアプローチ判定には再帰処理を使用します。数値の最下位の桁から順に取り出しながら隣接する桁同士を比較し、途中で一度で
-
【JavaScript】指定した数の倍数からなる配列を生成する方法
本記事では、2つの数値 m と n を引数として受け取り、m の倍数を先頭から n 個格納した配列を返すJavaScript関数の実装方法を解説します。要件の確認たとえば、入力として 4 と 6 が渡された場合、4の倍数を6個並べた次のような配列が期待される出力になります。const output = [4, 8, 12, 16, 20, 24];forループを使った実装まずは、基本的な for ループを使用したシンプルなコード例です。 { const res = []; for (let i = num1; i <= num1 * num2; i += num1) { res
-
JavaScriptで2次元行列の対角線要素の合計差を計算する方法
JavaScriptでは、2次元配列を使って正方行列を表現できます。例えば、以下のような3×3の行列があるとします。const arr = [ [1, 3, 5], [3, 5, 7], [2, 4, 2] ];求められる処理このような2次元配列を引数として受け取るJavaScript関数を作成する必要があります。この関数は、行列の2つの対角線(左上から右下への対角線と、右上から左下への対角線)上に存在する要素の合計値の差(絶対値)を返すものです。計算
-
【JavaScript】配列内の要素が指定した回数以上繰り返されていないか検証する方法
はじめにこの記事では、配列内の各要素が指定された上限回数を超えて繰り返されていないかどうかを検証するJavaScript関数の実装方法を解説します。作成する関数は、次の2つの引数を受け取ります。配列(arr):リテラル値を含み、一部の要素が重複している可能性がある配列数値(limit):要素が許容される最大の繰り返し回数関数は、配列内のどの要素もlimitで指定された回数より多く繰り返されていないことを確認する必要があります。もし1つでも要素がlimitを超えて繰り返されている場合は false を返し、すべての要素が条件を満たしていれば true を返します。実装の考え方この問題を解くには、
-
JavaScriptで複数の配列の要素をランク順にマッピングする方法
問題の概要 ここに、次のような3つの数値型JavaScript配列があると仮定します。 const array1 = [10,23,53,74,33,56,6,0,43,45,11]; const array2 = [52,46,27,28,4,11,53,6,75,75,22]; const array3 = [26,18,10,12,31,12,5,8,44,34,65]; すべての配列の長さは常に同じであるとします。 求められているのは、任意の数の配列を受け取り、すべての配列を通して対応する位置にある要素同士を比較し、その大小関係(降順)に基づいてランク(順位)を割り当てるJavaScr
-
JavaScriptで2つの配列を比較し、欠けている要素をnullで埋めた配列を作成する方法
問題の概要今回は、2つの配列を比較して新しい配列(第3の配列)を生成する関数を作成します。生成される配列には、2番目の配列のすべての要素がそのまま格納され、1番目の配列には存在しているものの2番目の配列から欠けている要素の位置には null が埋め込まれます。たとえば、次のような2つの配列があるとします。const arr1 = [f, g, h];const arr2 = [f, h];この場合、期待される出力は以下のとおりです。1番目の配列に含まれる g は2番目の配列に存在しないため、その位置が null になっています。const output = [f, null, h];実装コード
-
JavaScriptで括弧のバランスを取る:最小挿入回数を求めるアルゴリズム
問題の概要「(」と「)」の2種類の文字のみで構成された文字列が与えられます。この文字列に対して、必要な回数だけ「(」または「)」を挿入して括弧のバランスを取る関数を作成します。そして、その関数は文字列のバランスを取るために行った挿入の最小回数を返す必要があります。例たとえば、次のような文字列が与えられたとします。const str = ()));この場合、出力は 2 になります。先頭に「((」を追加すれば文字列のバランスが取れるためです。解決策:スタックを使ったアプローチこの問題は、スタック(配列)を使うことで効率的に解決できます。考え方は以下のとおりです。「(」が出現したらスタックにプッシュ
-
JavaScriptで2つのオブジェクトを比較しながら配列のネストされた値をグループ化する方法
この記事では、2つのオブジェクト(before と after)を比較しながら、ネストされた配列の値を1つの行にグループ化する方法を解説します。データの差分を表形式で整理したい場合などに役立つテクニックです。入力データの例まず、次のようなJSONオブジェクトがあるとします。before(変更前)と after(変更後)の2つの状態が含まれ、それぞれの device 配列の中に、id、price、features(機能名と価格)というネストされた構造を持っています。const input = { before: { device: [ { id: 1234
-
【JavaScript】文字列プロパティの値でオブジェクト配列を並べ替える方法
はじめに次のようなオブジェクトの配列があるとします。const arr = [ { first_name: Lazslo, last_name: Jamf }, { first_name: Pig, last_name: Bodine }, { first_name: Pirate, last_name: Prentice } ];この配列に対して、last_name キーの値をアルファベット順に並べ替えるJavaScript関数を作成する必要があります。実装コード以下はその実装例です。 { return a.last_name.charCodeAt(0
-
JavaScriptで配列を並べ替える方法|flagがfalseの要素を先頭に移動する
たとえば、次のようなオブジェクトの配列があるとします。 const arr = [ {flag: true, other: 1}, {flag: true, other: 2}, {flag: false, other: 3}, {flag: true, other: 4}, {flag: true, other: 5},  
-
JavaScriptでオブジェクトのサイズ(プロパティ数)を取得する方法
JavaScriptでは、配列の要素数は length プロパティで簡単に取得できますが、オブジェクトには標準で length プロパティが存在しません。そのため、オブジェクトに含まれるプロパティの数(サイズ)を知りたい場合は、独自の処理を実装する必要があります。対象となるオブジェクトの例たとえば、次のようなオブジェクトを考えてみましょう。const obj = { name: Ramesh, age: 34, occupation: HR Manager, address: Tilak Nagar, New Delhi, experience: 13
-
【JavaScript】オブジェクトの配列をプロパティ値でソートする方法
オブジェクト配列のソートとはJavaScriptでは、オブジェクトが格納された配列を、特定のプロパティの値を基準に並べ替えたい場面がよくあります。例えば、商品リストを価格順に表示したり、ユーザー一覧を名前順に整理したりするケースです。ここでは、次のような住宅情報を持つオブジェクトの配列を例に、price(価格)プロパティを基準に昇順・降順でソートする方法を解説します。const homes = [ { h_id: 3, city: Dallas, state: TX, zip: 75201, price: 162500 }, { h_id
-
【JavaScript】文字列の各文字を順番に大文字にした配列(メキシカンウェーブ)を作成する方法
はじめに本記事では、JavaScriptで「文字列の各文字を1つずつ順番に大文字へ変換し、その結果を配列として返す」関数の実装方法を解説します。この処理は、スタジアムで行われるように文字が波のように大文字になっていくことから、メキシカンウェーブと呼ばれることもあります。やりたいことたとえば、次のような文字列が与えられたとします。const str = edabit;この場合、出力は以下のようになります。つまり、先頭から順に1文字だけ大文字化された文字列が、配列の要素として並びます。const output = [Edabit, eDabit, edAbit, edaBit, edabIt, e
-
JavaScriptの再帰で解く!行列を螺旋状に巡回するスパイラルトラバーサル問題
問題の概要まず、次のような2次元配列を考えてみましょう。const arr = [ [1, 2, 3, 4], [12,13,14,5], [11,16,15,6], [10,9, 8, 7] ];この配列は正方行列(行数と列数が等しいマトリックス)であることが前提となっています。私たちの課題は、この配列を受け取り、外側から内側へ渦巻き状に要素を取り出して新しい配列を構築するJavaScript関数を書く
-
JavaScriptで配列が「ほぼ増加列」(almostIncreasingSequence)かどうかを判定する方法
問題の概要 整数の配列として与えられる数列について、最大1つの要素を取り除くだけで厳密に増加する数列(隣り合う要素がすべて a₀ < a₁ < … < aₙ を満たす並び)にできるかどうかを判定します。 なお、要素が1つだけの数列も厳密に増加しているものとみなします。 具体例 例1:false を返すケース sequence = [1, 3, 2, 1] の場合の出力: almostIncreasingSequence(sequence) = false この配列では、どの要素を1つだけ削除しても厳密に増加する数列を作ることができません。 例2:true を返すケース s
-
JavaScriptで最も近いギャップフル数を求めるアルゴリズム
「ギャップフル数(gapful number)」とは、3桁以上の整数のうち、「先頭の数字」と「末尾の数字」をつなげてできる2桁の数で割り切れる数のことです。この条件を満たす最小の数は 100 です。100 の場合、先頭が「1」、末尾が「0」なので、これらをつなげると「10」になり、100 は 10 で割り切れます。したがって、100 はギャップフル数であるといえます。今回の課題は、ある数 n を受け取り、n に最も近いギャップフル数(n 自身を含む)を返す関数を作成することです。ただし、距離が等しいギャップフル数が 2 つ見つかった場合は、小さい方の数を返すものとします。いくつか例を挙げます。
-
【JavaScript】同じ配列内で偶数を複製する方法を解説
本記事では、JavaScriptを使って、配列内の偶数を同じ配列の中で複製(繰り返し)する関数の作成方法を解説します。例えば、次のような配列が与えられた場合を見てみましょう。const arr = [1, 2, 5, 6, 8];この場合、期待される出力は以下のとおりです。const output = [1, 2, 2, 5, 6, 6, 8, 8];ご覧のとおり、偶数である「2」「6」「8」がそれぞれ元の位置に残ったまま、直後に複製されています。奇数はそのまま変化していません。実装コード以下が実際のコードです。 0; i--) { if (arr[i] % 2 === 0)
-
JavaScriptで配列内の数値に最も近い要素のインデックスを検索する方法
はじめにJavaScriptで、配列の中から指定した数値に最も近い要素のインデックスを見つけたい場面はよくあります。例えば、次のような配列があったとします。const arr = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];本記事では、このような配列と任意の数値 n を引数として受け取り、n に最も近い要素のインデックスを返す関数の作成方法を解説します。実装の考え方基本的なアプローチはシンプルです。配列を先頭から順に走査しながら、各要素と対象の数値との差(絶対値)を計算し、これまでに見つかった最小の差より小さければ、その時点のインデックスと差を
-
配列内の一意な要素をカウントするJavaScript関数の実装方法
本記事では、配列内に含まれる一意(ユニーク)な要素をすべてカウントするJavaScript関数の作成方法を解説します。この関数は、配列内の各一意な要素とその出現回数を対応付けたオブジェクトを返します。要件の概要例えば、次のような文字列の配列があったとします。const arr = [hi, hello, hi];この場合、期待される出力は「hi」が2回、「hello」が1回出現していることを示すオブジェクトになります。コード例以下がその実装コードです。 { const counts = {}; for (var i = 0; i < arr.length; i++) {