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

JavaScriptで配列内の文字列から数値の合計を求める方法

はじめに

本記事では、ハイフン区切りのクレジットカード番号が格納された配列を扱い、「各桁の数字の合計」が最も大きい番号を抽出する関数をJavaScriptで実装する方法を解説します。

問題設定

たとえば、次のようなデモ用のクレジットカード番号を含む配列があるとします。

const arr = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'];

この配列を引数として受け取る関数を作成し、各番号を構成する数字の合計が最大となるカード番号を返します。ただし、合計が同点の場合は、配列内で最後に出現した番号を返すという要件があります。

解決の考え方

全体の処理の流れは次のとおりです。

  1. replace(/-/g, '') でハイフンをすべて除去する
  2. split('') で文字列を1桁ずつに分解する
  3. reduce() で各桁を数値化して合計する
  4. Math.max() で最大値を求め、lastIndexOf() で該当インデックスを取得する

ここでのポイントは lastIndexOf() の活用です。このメソッドは条件に一致する要素のうち最後のインデックスを返すため、「同点の場合は後ろの要素を優先する」という要件を追加の判定なしに自然に満たすことができます。

サンプルコード

const arr = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'];

// 各カード番号の桁の合計を計算する
const digitSum = (num) => {
  return num.replace(/-/g, '').split('').reduce((sum, digit) => sum + Number(digit), 0);
};

// 桁の合計が最大となるカード番号を返す
const findGreatestNumber = (arr) => {
  const sums = arr.map(digitSum);
  const maxSum = Math.max(...sums);
  return arr[sums.lastIndexOf(maxSum)];
};

console.log(findGreatestNumber(arr));

実行結果

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

4252-278893-7978

動作の確認

各カード番号の桁の合計を実際に計算してみると、次のようになります。

  • 4916-2600-1804-0530 → 49
  • 4779-252888-3972 → 81
  • 4252-278893-7978 → 81
  • 4556-4242-9283-2260 → 64

2番目と3番目のカード番号が同点(81)であるため、lastIndexOf() によって後方にある '4252-278893-7978' が選択されます。これは仕様どおりの正しい動作です。

まとめ

「文字列の前処理(ハイフンの除去)→ 桁ごとの分解 → 合計の計算 → 最大値の特定」という一連の流れを、map()reduce()Math.max()lastIndexOf() を組み合わせるだけで簡潔に実装できます。同点の扱いが必要になる場面では、lastIndexOf() が有効な選択肢になることを覚えておきましょう。

  1. 【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説

    JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio

  2. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g