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

JavaScriptで配列が表す数値より1大きい数を新しい配列として返す方法

問題の概要

正の整数のみを含む配列 arr を受け取るJavaScript関数を作成する必要があります。

この関数は、まず配列内の数字をつなぎ合わせて1つの数値とみなし、その数値に1を足した結果を、再び各桁に分割した新しい配列として返します。

例えば、関数への入力が次の場合を考えてみましょう。

入力

const arr = [6, 7, 3, 9];

出力

const output = [6, 7, 4, 0];

出力の解説

入力配列が表す数値は「6739」であり、それに1を加えた「6740」を各桁に分解すると [6, 7, 4, 0] となるためです。

実装コード

以下がその実装例です。

const arr = [6, 7, 3, 9];
const justGreater = (arr = []) => {
   // 負の数や空配列は不正な入力としてnullを返す
   if(!arr.every(v=>v>=0) || arr.length === 0){
      return null;
   };
   // 各要素が1桁の整数であることを確認
   if(arr.some(v=>v.toString().length > 1)){
      return null;
   };
   let res = [];
   // 15桁ずつに分割して精度低下を防ぐ
   for (let i=0; i < arr.length; i += 15){
      res.push(arr.slice(i,i+15));
   };
   // 最後のブロックだけに1を加算
   res[res.length-1]= res[res.length-1].join('')*1+1;
   // 各ブロックを文字列化して結合し、再度1桁ずつの配列に変換
   res=res.map(v=>Array.isArray(v)?v.join('')*1:v);
   return (res.join('')).split('').map(v=>v*1);
};
console.log(justGreater(arr));

出力結果

[6, 7, 4, 0]

コードのポイント

このアプローチで注目すべき点は以下の通りです。

1. 入力値のバリデーション

配列が空である場合や、負の数・複数桁の数値が含まれている場合は null を返して処理を中断します。これにより、想定外の入力に対する堅牢性が確保されます。

2. 15桁ごとの分割処理

JavaScript の Number 型は安全に扱える整数の上限(Number.MAX_SAFE_INTEGER = 9007199254740991、16桁)があるため、一度に大きな数値へ変換すると精度が失われる恐れがあります。そこで、15桁ごとに配列を分割することで、大きな桁数でも正確な計算が可能になっています。

3. 最終ブロックのみ加算

1を足す操作は最も下位の桁に影響するため、末尾のブロックにのみ加算処理を行えば十分です。その後、すべてのブロックを結合して1桁ずつ数値化した配列を返します。

この手法を使えば、BigInt を使わなくても非常に長い桁数の数値に対して「+1」の演算を正確に実行できます。

  1. JavaScriptのArray.prototype.map()メソッドの使い方を徹底解説

    Array.prototype.map()とは? JavaScriptのArray.prototype.map()メソッドは、配列の各要素に対してコールバック関数を実行し、その戻り値から新しい配列を作成するためのメソッドです。元の配列は変更されないため、安全にデータ変換を行いたい場合に非常に便利です。 構文 arr.map(function callback(currentValue[, index[, array]]) 各引数の意味は以下のとおりです。 currentValue:現在処理している要素の値 index(省略可能):現在処理している要素のインデックス番号 array(省略可能

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の