-
JavaScriptで配列をループして特定の文字が含まれているか検索する方法
概要今回は、文字列の配列を第1引数として受け取り、1文字を第2引数として受け取るJavaScript関数を作成します。この関数は、第2引数で指定された文字が配列内のいずれかの文字列に含まれていれば true を返し、どこにも存在しなければ false を返す必要があります。サンプルコード実際のコードは以下の通りです。 { for(let i = 0; i < arr.length; i++){ const el = arr[i]; if(!el.includes(letter)){ continue; }; return true; };
-
【JavaScript】基準配列の順序どおりにオブジェクト配列をソートする方法
JavaScriptでは、ある「文字列の配列」を基準として、別のオブジェクト配列をその順序どおりに並べ替えたい場面があります。本記事では、基準配列の順序に合わせてオブジェクト配列をソートする方法を、具体的なコード例とともにわかりやすく解説します。 やりたいこと まず、並べ替えの基準となる配列と、並べ替え対象のオブジェクト配列を用意します。各オブジェクトの content プロパティの値が、基準配列内の文字列に対応しています。 const order = [this, is, my, custom, order]; const myObjects = [ { id: 1, cont
-
JavaScriptで配列が等間隔(同じ差分)で増加しているかどうかを判定する方法
配列が等差数列になっているかをチェックする本記事では、数値の配列を受け取るJavaScript関数の作成方法を解説します。この関数は、隣接する要素同士の差がすべて同じ正の数である場合に true を返し、そうでない場合には false を返します。つまり、配列が一定の間隔(等差)で増加している、いわゆる「等差数列」になっているかどうかを判定する処理です。実装コード以下のコードをご覧ください。const arr = [4, 7, 10, 13, 16, 19, 22]; const growingMarginally = arr => {
-
JavaScriptでオブジェクトにキーが存在するか確認する正しい方法
JavaScriptでは、オブジェクトの中に特定のキー(プロパティ)が存在するかどうかを判定したい場面が頻繁にあります。本記事では、まずよく見られる誤った判定方法とその問題点を確認し、その後で推奨される正しい方法を2つ紹介します。 誤った方法:undefinedとの比較 次のようなオブジェクトを例に考えてみましょう。 const obj = { name: Rahul }; 「fName」というキーが存在するかどうかを、次のように判定してしまうコードをよく見かけます。 if (!obj[fName]) {} または if (obj[fName] === undefined) {} 一見する
-
JavaScriptでオブジェクトの配列からプロパティごとに個別の配列を抽出する方法
はじめにJavaScriptでは、複数のオブジェクトを含む配列(オブジェクト配列)を扱う場面がよくあります。たとえば、次のようなクライアント情報を格納した配列があるとします。const arr = [{ name : Client 1, total: 900, value: 12000 }, { name : Client 2, total: 10, &nb
-
JavaScriptでオブジェクトを値の昇順に並べ替える方法をわかりやすく解説
問題の概要次のようなオブジェクトがあるとします。const obj = { sub1: 56, sub2: 67, sub3: 98, sub4: 54, sub5: 87};ここで求められているのは、このようなオブジェクトを引数として受け取るJavaScript関数を作成することです。作成する関数は、オブジェクト内の各キーに対応する値(バリュー)の昇順に基づいてオブ
-
JavaScriptで別のオブジェクト配列を基準に、オブジェクト配列をフィルタリングする方法
まず、以下のような2つのオブジェクト配列があると仮定しましょう。const arr1 = [{id:'1',name:'A'},{id:'2',name:'B'},{id:'3',name:'C'},{id:'4',name:'D'}]; const arr2 = [{id:'1',name:'A',state:'healthy'},{id:'3',name:'C',state:'
-
【JavaScript】2つの文字列から共通する部分文字列を抽出して返す関数の実装方法
本記事では、2つの文字列を引数として受け取り、両方の文字列に共通して含まれる部分文字列をすべて抽出し、その結果を返すJavaScript関数の実装方法を解説します。 やりたいことの整理 今回作成する関数には、次のような役割が求められます。 引数として2つの文字列を受け取る 片方の文字列から生成できるすべての部分文字列を調べ、もう片方の文字列にも含まれているかどうかを確認する 共通する部分文字列を重複なくまとめ、最終的にその結果を呼び出し元へ返す サンプルコード 実際のコードは以下のとおりです。 const str1 = "IloveLinux"; const str
-
【JavaScript】Object.keys()とreduce()を使ってオブジェクトの配列値を単一の値に変換する方法
はじめにJavaScriptでは、オブジェクトの各キーが持つ配列から特定の要素だけを取り出し、新しいオブジェクトの配列として整形したいケースがあります。本記事では、Object.keys()とreduce()を組み合わせて、配列形式のプロパティ値をその2番目の要素へ変換する方法を解説します。元となるデータ例えば、次のようなオブジェクトの配列があるとします。各キーには2つの要素を持つ配列が格納されています。const arr = [ { col1: [a, b], col2: [c, d] }, { col1: [e, f]
-
JavaScriptで変換メソッドを使わずに数値文字列同士を足し算する方法
本記事では、2つの数値文字列を受け取り、Number() や parseInt() などの変換メソッドに頼らずに合計値を計算するJavaScript関数を作成します。大きな数値を扱う際に数値型への変換による精度落ちを避けたい場合などに役立つテクニックです。要件の確認たとえば、次のような入力が与えられたとします。const str1 = 123; const str2 = 456;この場合、期待される出力は次のとおりです。const output = 579;アプローチ:筆算と同じ考え方で桁ごとに加算する学校で習った筆算と同じ要領で、一番右の桁(1の位)から順に1桁ずつ加算していきます。各桁の合
-
JavaScriptで数値を7進表現(基数7)に変換する方法を解説
7進数への変換の基本 2進数への変換では、10進数の数値を繰り返し2で割りながら余りを記録していきます。これとまったく同じ考え方で、7進数への変換では、対象の数値を繰り返し7で割っていくことで7進表現を求めることができます。 今回作成するのは、任意の数値を受け取り、その7進表現を返すJavaScript関数です。 たとえば、以下のような結果になります。 base7(100) = 202 100を7進数で表すと「202」となります。これは、100 ÷ 7 = 14 余り 2 → 14 ÷ 7 = 2 余り 0 → 2 ÷ 7 = 0 余り 2 という一連の除算で得られた余りを、下の桁から順に並べ
-
JavaScriptのArray.prototype.every()メソッドで配列同士を比較する方法
本記事では、リテラル値からなる2つの配列を受け取り、最初の配列のすべての要素が2番目の配列に含まれているかどうかを判定するJavaScript関数を作成します。要素の出現回数(個数)は考慮せず、1つでも含まれていない要素があればfalseを返します。この比較にはArray.prototype.every()メソッドを使用します。every()は配列内のすべての要素が指定した条件(コールバック関数)を満たしているかどうかを確認し、結果をブール値で返す便利なメソッドです。コード例 { return arr2.includes(el); }); return areE
-
JavaScriptで出現回数を考慮して2つの配列を比較する方法
同じ数の要素を持つ2つの配列があると仮定しましょう。ここでの課題は、両方の配列に同じ要素が同じ回数だけ含まれているかどうかを判定する関数を作成することです。 条件を満たしている場合は true を、満たしていない場合は false を返します。つまり、単に要素の種類だけでなく、各要素の出現回数まで一致している必要があります。 アプローチ 実装の方針は以下の通りです。 まず、2番目の配列のコピーを slice() で作成します(元の配列を変更しないため)。 1番目の配列を順に走査し、その過程で1番目の配列に存在する要素を、コピーした配列から削除していきます。 走査中に、コピー先の配列に存在し
-
JavaScriptでオブジェクト配列をidをキーとするオブジェクトに変換する方法
JavaScriptでは、オブジェクトの配列を「キーが各オブジェクトのプロパティ値であるオブジェクト」へ変換したいケースがよくあります。本記事では、id プロパティをキーとして使う変換方法を解説します。前提となるデータまず、次のようなオブジェクトの配列を想定します。const arr = [{id:1,name:aa},{id:2,name:bb},{id:3,name:cc}];要件この配列を受け取り、各オブジェクトの id プロパティの値をキーとしたオブジェクトを返す関数を作成します。期待される出力は以下の通りです。const output = {1:{name:aa},2:{name:b
-
JavaScriptで日付に基づいてネストされた配列を昇順・降順にソートする方法
Web開発では、APIレスポンスなどで受け取ったオブジェクト内のネストされた配列を、日時情報を基準に並べ替えたい場面がよくあります。ここでは、次のようなJSONオブジェクトを例に考えてみましょう。 const arr = { DATA: [ { BookingID: 9513, DutyStart: 2016-02-11 12:00:00 }, { BookingID: 91157307, DutyStart: 2016-02-11 13:00
-
JavaScriptで文字列内の各アルファベットをn個先の文字に置き換える方法
問題の概要アルファベットで構成された文字列と整数nを受け取り、各文字を「n個先」のアルファベットに置き換えた新しい文字列を返すJavaScript関数を作成する必要があります。この処理は、古典的な暗号化手法であるシーザー暗号(Caesar cipher)と同じ考え方に基づいています。例えば、入力が以下の場合を考えてみましょう。const str = abcd;const n = 2;この場合、期待される出力は次の通りです。const output = cdef;aは2つ先のcに、bはdにというように、文字列内のすべての文字がn個先のアルファベットへとシフトされます。実装コードconst str
-
JavaScriptでidプロパティを使って複雑なネスト構造のオブジェクトを検索する方法
はじめにJavaScriptでは、入れ子構造(ネスト)になったJSONオブジェクトの中から、特定の条件に一致するサブオブジェクトを取り出したい場面がよくあります。本記事では、「id」のキーと値のペアを指定して、階層構造全体から該当するオブジェクトを再帰的に検索する関数の実装方法を解説します。対象となるデータ構造例として、次のような複雑なJSONオブジェクトを考えてみましょう。const obj = { id: 0001, fieldName: sample1, fieldValue: 0001, subList: [ { id: 1001, fi
-
JavaScriptで配列の要素をランダムにシャッフルする方法
JavaScriptでは、リテラルを格納した配列を受け取り、その要素の順序を元の配列を直接書き換える形(in-place)でランダムにシャッフルする関数を実装したいケースがあります。本記事では、配列の要素をランダムな順序に並べ替えるシンプルな関数の実装例を紹介します。実装例コードは以下のとおりです。const letters = [a, b, c, d, e, f, g]; const unorderArray = arr => { let i, pos, temp; for (i = 0; i < 100; i++) { pos = Math.ra
-
JavaScriptで1からnumまでの自然数の合計を求める関数の実装方法
概要JavaScriptで、ある数値(例えば num)を受け取り、1からその数値までのすべての自然数の合計(両端の1とnumを含む)を返す関数を作成します。例えば、num が次のような値だったとします。const num = 5;この場合、期待される出力は以下の通りです。const output = 15;なぜなら、1 + 2 + 3 + 4 + 5 = 15となるからです。解法:等差数列の和の公式を使うこの問題は、等差数列の和の公式を利用することで、ループ処理なしに効率的に解くことができます。1からnまでの自然数の合計は、次の公式で求められます。n * (n + 1) / 2ループで一つずつ
-
【JavaScript】指定範囲内でn個の乱数を生成し、最大値を取得する方法
本記事では、JavaScriptで「乱数の生成範囲」と「生成する個数」を受け取り、生成した乱数の中から最大値を返す関数の実装方法を解説します。 作成する関数の仕様は以下のとおりです。 第1引数:2つの数値を含む配列。乱数を生成する範囲(最小値と最大値)を指定します。 第2引数:単一の数値。生成する乱数の個数を指定します。 戻り値:生成されたすべての乱数の中で最も大きい数値。 コード例 実際のコードは次のとおりです。 { const res = []; for(let i = 0; i < count; i++){ const random = ran