JavaScript

 Computer >> コンピューター >  >> プログラミング >> JavaScript
  1. JavaScriptで回文数(パリンドローム)を判定する方法

    本記事では、数値を受け取り、それが回文数であるかどうかを判定するJavaScript関数の作成方法を解説します。 回文数とは? 回文数とは、左から読んでも右から読んでも同じ数字の並びになる数値のことです。 以下に具体例を挙げます。 343 … 回文数である(逆から読んでも「343」) 6789876 … 回文数である(逆から読んでも「6789876」) 456764 … 回文数ではない(逆から読むと「467654」となるため) 実装例 それでは、実際のコードを見てみましょう。この関数は、文字列変換を行わずに数値演算だけで判定を行う点が特徴です。 const num1 = 343; co

  2. JavaScriptで配列の次数と最短部分配列の長さを求める方法

    配列の次数とは何か 配列の「次数(degree)」とは、その配列に含まれるいずれかの要素が出現する最大の頻度として定義される指標です。 const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3]; たとえば上記の配列では、要素「3」が合計4回出現しています。そのため、この配列の次数は4となります。 課題の内容 今回求められているのは、リテラルの配列を引数として受け取るJavaScript関数の作成です。この関数の役割は、「配列全体と同じ次数を持つ連続した部分配列」のうち、最も長さが短いものの長さを求めることです。 実装例 以下のコードでは、Mapオブジェクトを活用して

  3. 【JavaScript】厳密に増加する要素のみを含む最長の連続部分配列の長さを求める方法

    本記事では、数値の配列を唯一の引数として受け取る JavaScript 関数を作成する方法を解説します。この関数は、配列の中から「厳密に増加する(strictly increasing)」要素のみで構成される最長の連続部分配列を見つけ、その長さを返すものです。厳密に増加する列とは?「厳密に増加する列」とは、どの要素もその直前の要素よりも必ず大きい(等しい場合は不可)ような数列のことです。たとえば [5, 7, 8, 12] は各要素が前の要素より大きいため厳密に増加していますが、[4, 4, 6] は同じ値が連続しているため該当しません。アルゴリズムの考え方この問題は、配列を一度だけ走査する線

  4. JavaScriptで相対的な順序に基づいて配列をソートする方法

    この記事では、JavaScriptを使って「相対的な並べ替え(Relative Sort)」を実装する方法を解説します。問題の概要2つの配列、たとえば arr1 と arr2 があるとします。arr2 の要素はすべて重複がなく、かつ arr2 のすべての要素は arr1 にも含まれています。ここで求められるのは、次のような処理を行うJavaScript関数の実装です。arr1 の要素を、arr2 における要素の相対的な順序と同じ順序になるようにソートする。arr2 に存在しない要素は、arr1 の末尾に昇順で配置する。入力例const arr1 = [2,3,1,3,2,4,6,7,9,2,1

  5. JavaScriptでDB形式のフラットデータをJSONツリー(ネスト構造)に変換する方法

    はじめに データベースでは、カテゴリ一覧や組織図、地域マスタのような階層データを、各レコードが parentId で親を参照するフラットな配列(隣接リスト形式)として保存するのが一般的です。しかし、フロントエンドでツリービューを描画したり、再帰的にデータを処理したりする場面では、親子関係がネストされた JSON 構造へ変換する必要があります。 本記事では、JavaScript だけでこの変換を行うシンプルかつ高速な手法を、具体的なコード例とともに解説します。 入力データ(DB形式) まず、変換元となる配列を見てみましょう。各オブジェクトは id、name、親ノードの ID を表す parent

  6. 【JavaScript】数値の再利用を許可して、目標の合計値に到達できるすべての組み合わせを生成する方法

    はじめに本記事では、JavaScriptを使って「配列内の数値を組み合わせて、目標の合計値(ターゲットサム)に到達するすべての組み合わせ」を求める方法を解説します。ポイントは、同じ数値を何度でも再利用できるという点です。これは典型的なバックトラッキング(探索の巻き戻し)を用いた再帰処理の応用例であり、アルゴリズムの学習にも最適な題材です。要件の確認まず、実装するJavaScript関数の仕様を整理しましょう。第1引数として数値の配列、第2引数として目標となる合計値を受け取る元の配列から要素を選び、その合計が目標値と一致するすべての部分配列を返す1つの数値は複数回使用してよいたとえば、入力が以下

  7. JavaScriptで別のオブジェクト配列をもとに新しいオブジェクト配列を作成する方法

    問題の概要次のように、ユーザーの「いいね」情報や年齢を含むオブジェクトの配列があるとします。const arr = [ {user:dan,liked:yes,age:22}, {user:sarah,liked:no,age:21}, {user:john,liked:yes,age:23}, ];ここで必要なのは、この配列を受け取り、各要素から「user」をキー、「liked」を値とする新しいオブジェクトを生成して、以下のような配列を組み立てるJavaScript関数です。const output = [ {dan:yes}, {sarah:no}, {john:y

  8. 【JavaScript】整数配列から可能なすべての順列を生成する関数の実装方法

    本記事では、整数の配列を引数として受け取り、その要素を使って作成できるすべての順列(並べ替え)を配列として返す関数を、JavaScriptで実装する方法を解説します。実装する関数の仕様整数の配列を引数として受け取る(例:[1, 2, 3, 4])元の配列と同じ長さ(この例では4要素)の順列をすべて生成する生成したすべての順列を格納した配列を返すアルゴリズムの考え方(バックトラッキング)ここでは「バックトラッキング」と呼ばれる手法を使用します。処理の流れは以下の通りです。配列から要素を1つ取り出し、使用済みの要素を保持する配列(used)に追加する元の配列が空になったら、usedのコピーを結果配

  9. JavaScriptのバックトラッキングパターンで解くアルゴリズム問題:全マスを通るユニークパスの総数

    今回は、バックトラッキング(Backtracking)パターンを使って解く典型的なアルゴリズム問題を、JavaScriptで実装してみましょう。 2次元グリッド上には、次の4種類のマスが存在します。 1:スタート地点のマス(必ず1つだけ存在する) 2:ゴール地点のマス(必ず1つだけ存在する) 0:自由に移動できる空きマス -1:障害物(通行できないマス) 実装する関数は、スタートからゴールまで「上下左右の4方向移動」だけで進み、かつ障害物以外のすべてのマスをちょうど1回ずつ通過する経路の総数を返すものです。 例 const arr = [ [1,0,0,0], [0,0,0

  10. JavaScriptで配列内の単語のすべての組み合わせ(順列)を生成する方法

    JavaScriptでは、文字列の配列を受け取り、その要素から作り出せるすべての組み合わせ(順列)を生成して返す関数を実装できます。本記事では、再帰呼び出しとバックトラッキングを用いた実装方法を、サンプルコードと実行結果とともにわかりやすく解説します。 実装の考え方 組み合わせの生成には「バックトラッキング」と呼ばれる手法が有効です。各ステップで未使用の要素を1つ選んで現在の文字列に連結し、必要な長さ分だけ再帰的に処理を進めます。残りの長さが0になった時点で、完成した1つの組み合わせを結果配列に格納します。 同じ要素を二重に使わないよう、各要素が使用済みかどうかを記録する真偽値の配列を用意しま

  11. 【JavaScript】重複する配列の値をフィルタリングして数値を合計する方法

    配列の中に配列が含まれる、次のようなデータを考えてみましょう。const arr = [[12345, product, 10],[12345, product, 15],[1234567, other, 10]];ここで求められているのは、このような配列を引数として受け取る関数を作成することです。すべてのサブ配列が、必ず3つの要素を持っている点に注目してください。作成する関数では、最初の要素(ID)が重複しているサブ配列を1つにまとめる必要があります。さらに、統合によって取り除かれたサブ配列の3番目の要素(数量)は、重複していない対応するサブ配列の値に加算しなければなりません。上記の配列の場

  12. JavaScriptの配列で指定範囲の合計を求めるsumRange関数の実装方法

    本記事では、Array.prototypeオブジェクト上に定義できる配列関数として、開始インデックスから終了インデックスまでの要素(両端を含む)の合計値を返すsumRangeメソッドの実装方法を解説します。実装の要件開始インデックスと終了インデックスを引数として受け取る範囲内のすべての要素(開始・終了の両端を含む)を合計する開始インデックスが終了インデックスより大きい場合は、合計値として0を返す引数が省略された場合に備えてデフォルト値を設定するサンプルコード(forループ版)Array.prototype.sumRange = function(start = 0, end = this.le

  13. JavaScriptで配列の多数派要素(過半数を占める要素)を見つける方法

    サイズ n の配列が与えられたとき、その中に含まれる「多数派要素(majority element)」を見つける必要があります。多数派要素とは、配列の中で n / 2 回よりも多く出現する要素のことです。 多数派要素とは? 例えば配列の長さが 10 の場合、5 回より多く(つまり 6 回以上)出現する要素が多数派要素となります。性質上、このような要素は配列の中に最大で 1 つしか存在しません。 解決策:ハッシュマップで出現回数をカウントする 最もシンプルなアプローチは、各要素の出現回数をオブジェクト(ハッシュマップ)で記録しながら配列を走査し、出現回数が閾値(n / 2)を超えた時点でその要素

  14. JavaScriptで文字列の配列をキー/値ペアのオブジェクトに変換する方法

    まず、次のような文字列の配列があるとします。const arr = [ type=A, day=45 ];ここで求められているのは、このような配列を引数として受け取り、その内容をもとにオブジェクトを構築するJavaScript関数を作成することです。生成されるオブジェクトには、配列内の各文字列に対応するキーと値のペアが含まれている必要があります。各文字列に対しては、「=」よりも前の部分がキーになり、「=」よりも後の部分が値として扱われます。コード例const arr = [ type=A, day=45 ]; const arrayToObject = (arr = []) => { &

  15. JavaScriptで配列内の重複回数が最も少ない要素を検索する方法

    問題の概要重複した値を含む可能性のあるリテラル値の配列を受け取り、その中から出現回数が最も少ない要素をすべて配列として返すJavaScript関数を作成することを考えてみましょう。例えば、入力配列が次のようになっているとします。const arr = [1, 1, 2, 2, 3, 3, 3];この場合、期待される出力は以下の通りです。const output = [1, 2];これは、1 と 2 の出現回数が最も少なく(それぞれ2回)、一方 3 は3回出現しているためです。つまり、最小の出現回数を持つ要素をすべて抽出する必要があります。解決のアプローチこの問題は、ハッシュ(連想配列)オブジェ

  16. 【JavaScript】ドット記法でフラット化されたオブジェクトを、ネストされたオブジェクトと配列へ展開する方法

    はじめにAPIレスポンスやフォームデータなどでは、car.make のようにドット区切りのキーを持つフラットなオブジェクトが扱われることがあります。本記事では、こうしたドット記法のオブジェクトを、ネストされたオブジェクトや配列を含む通常の構造へと展開(アンフラット化)する方法を解説します。まず、次のようなオブジェクトを例として考えます。const obj = { firstName: John, lastName: Green, car.make: Honda, car.model: Civic, car.revisions.0.miles: 10150, car.re

  17. 【JavaScript】オブジェクトが持つすべてのメソッドを取得する方法

    JavaScriptでは、オブジェクトへの参照を受け取り、そのオブジェクト上に存在するすべてのメソッド(メンバー関数)を配列として返すプログラム(関数)が必要になることがあります。ここで重要なのは、返す配列にはメソッドだけを含めることです。つまり、値が文字列や数値など関数以外のデータ型であるプロパティは除外する必要があります。解決策:Object.getOwnPropertyNames()を使うこの問題を解決するには、Object.getOwnPropertyNames() メソッドを使用します。Object.getOwnPropertyNames() は、指定されたオブジェクトが直接持つすべ

  18. JavaScriptで値が配列に存在するかチェックして次の要素を取得する方法

    概要本記事では、文字列の配列を第一引数、検索対象の値を第二引数として受け取るJavaScript関数を作成します。この関数は配列内から指定された値を検索し、その値が存在すれば配列内の次の要素を返し、存在しなければfalseを返すものです。コード例const arr = ["", "comp", "myval", "view", "1"] const getNext = (value, arr) => { const a = [undefined].concat(arr); con

  19. JavaScriptで2進数の「1」同士の最長距離(バイナリギャップ)を求める方法

    問題の概要正の整数 n を受け取る JavaScript 関数を作成しましょう。この関数は、n を2進数で表したときに出現する「1」のうち、隣接する2つの1の間の最長距離(バイナリギャップ)を求めて返します。もし隣接する1が2つも存在しない場合は、0 を返します。「隣接」と「距離」の定義2つの1が隣接しているとは、その間が0のみで区切られている(あるいは何も挟まれていない)状態を意味します。間に別の1が存在する場合、それらは隣接とはみなされません。また、2つの1の距離は、それぞれのビット位置の差の絶対値として定義されます。たとえば「1001」に含まれる2つの1の距離は 3 です。具体例入力が

  20. JavaScriptで連続する範囲のオブジェクトをグループ化する方法

    この記事では、userId、from、to というプロパティを持つオブジェクトの配列から、範囲が連続している(重なっている)要素を1つにまとめる方法を解説します。 元となるデータ まず、次のようなオブジェクトの配列があるとします。 const arr = [     {userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6},     {userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15},  &

Total 5937 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:57/297  20-コンピューター/Page Goto:1 51 52 53 54 55 56 57 58 59 60 61 62 63