JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで数値の配列を個々の桁に分割する方法

数値リテラルの配列が与えられたとき、splitDigit() のような関数を作成することを考えます。この関数は配列を受け取り、10以上の数値を個々の桁に分割した新しい数値の配列を返します。

期待される動作

// 入力:
const arr = [ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106 ];

// 出力:
const output = [ 9, 4, 9, 5, 9, 6, 9, 7, 9, 8, 9, 9, 1, 0, 0, 1, 0, 1,
1, 0, 2, 1, 0, 3, 1, 0, 4, 1, 0, 5, 1, 0, 6 ];

それでは、この関数のコードを書いていきましょう。ここでは Array.prototype.reduce() メソッドを使って配列の各要素を処理します。あわせて、各数値を再帰的に1桁ずつ分解するヘルパー関数 splitNum() を定義します。

コード例

const arr = [ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106 ];

// 数値を再帰的に1桁ずつ分解するヘルパー関数
const splitNum = (n, res = []) => {
   if(n){
      return splitNum(Math.floor(n/10), [n % 10].concat(res));
   };
   return res;
};

// reduce() ですべての要素を処理する
const splitDigit = (arr) => {
   return arr.reduce((acc, val) => acc.concat(splitNum(val)), []);
};

console.log(splitDigit(arr));

仕組みの解説

splitNum() 関数は、引数 n を10で割った余り(最下位の桁)を結果配列の先頭に追加しながら、商に対して再帰呼び出しを行います。これにより、数値が左から右へ順番に個々の桁として展開されます。

一方、splitDigit() では reduce() を使用し、初期値として空の配列を指定します。各要素を splitNum() で分割した結果を順次連結していくことで、全体を1つのフラットな桁の配列にまとめています。

実行結果

コンソールには次のように出力されます。

[
   9, 4, 9, 5, 9, 6, 9, 7, 9,
   8, 9, 9, 1, 0, 0, 1, 0, 1,
   1, 0, 2, 1, 0, 3, 1, 0, 4,
   1, 0, 5, 1, 0, 6
]
  1. JavaScriptで小数を検証するには?正規表現を使った実装例を解説

    JavaScriptで小数を検証する方法 JavaScriptで、ユーザーが入力した値が正しい小数(小数点を含む数値)かどうかを判定したい場面はよくあります。そんなときに便利なのが正規表現です。本記事では、match()メソッドと正規表現を組み合わせて、入力値が小数かどうかを検証する方法を、具体的なコード例とともにわかりやすく解説します。 使用する正規表現パターン 今回の検証では、以下の正規表現を使用します。 /^[-+]?[0-9]+\.[0-9]+$/ このパターンの各要素の意味は次のとおりです。 ^[-+]?:文字列の先頭に符号(+ または -)が付いていても、付いていなくてもマッチ

  2. JavaScriptで配列を連続する整数の部分列に分割できるか判定する方法

    問題ソート済みの整数配列 arr を引数として受け取る JavaScript 関数を作成します。この関数は、配列を1つ以上の部分列(サブシーケンス)に分割でき、それぞれの部分列が連続した整数で構成され、長さが3以上である場合にのみ true を返し、それ以外の場合は false を返す必要があります。例として、関数への入力が以下であるとします。入力const arr = [1, 2, 3, 3, 4, 5];出力const output = true;出力の説明この配列は、次の2つの連続する部分列に分割できます。1, 2, 33, 4, 5それぞれの部分列が連続した整数(差が1ずつ増加)で構成