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

JavaScriptでスペース区切りの数値文字列から最大値と最小値を抽出する方法

問題

今回実装するのは、スペースで区切られた複数の数値を含む文字列を引数として受け取るJavaScript関数です。関数は、文字列の中から最大の数値最小の数値だけを抜き出し、それらをスペースで区切った1つの文字列として返す必要があります。

入力例:

const str = '5 57 23 23 7 2 78 6';

出力例:

const output = '78 2';

これは、配列内の最大値が 78、最小値が 2 であるためです。

解決策:reduce() を使った実装

以下のコードでは、split() で文字列を配列に変換し、reduce() メソッドを使って1回の走査で最大値と最小値を同時に求めています。

const str = '5 57 23 23 7 2 78 6';
const pickGreatestAndSmallest = (str = '') => {
    const strArr = str.split(' ');
    let creds = strArr.reduce((acc, val) => {
        let { greatest, smallest } = acc;
        greatest = Math.max(val, greatest);
        smallest = Math.min(val, smallest);
        return { greatest, smallest };
    }, {
        greatest: -Infinity,
        smallest: Infinity
    });
    return `${creds.greatest} ${creds.smallest}`;
};
console.log(pickGreatestAndSmallest(str));

出力結果

78 2

コードの解説

  • str.split(' '):入力文字列をスペースで分割し、数値文字列の配列に変換します。
  • reduce():配列を順番に処理し、初期値 { greatest: -Infinity, smallest: Infinity } を起点として各要素との比較を繰り返します。
  • Math.max()Math.min():現在の値と累積値を比較し、それぞれ最大値・最小値を更新していきます。
  • 初期値に -Infinity(負の無限大)と Infinity(正の無限大)を使用することで、入力される数値の範囲に関わらず正しく動作します。
  • 最後にテンプレートリテラルで「最大値 最小値」の形式の文字列を組み立てて返しています。

別のアプローチ:スプレッド構文を使う簡潔な書き方

よりシンプルに記述したい場合は、map(Number) で数値化した配列に対して、スプレッド構文(...)と Math.max()/Math.min() を直接組み合わせる方法もあります。

const pickGreatestAndSmallest = (str = '') => {
  const nums = str.split(' ').map(Number);
  return `${Math.max(...nums)} ${Math.min(...nums)}`;
};

console.log(pickGreatestAndSmallest('5 57 23 23 7 2 78 6')); // "78 2"

ただし、要素数が極端に多い配列では、スプレッド構文による引数展開でスタックオーバーフローが発生する可能性があります。大規模なデータを扱う場合は、前述の reduce() を使った実装の方が安全で効率的です。

  1. JavaScriptで指定した範囲内にある「ある数で割り切れる数」の個数を求める方法

    問題2つの整数からなる範囲(配列)を第1引数に、1つの数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在する「入力された数値で割り切れる数」をすべて見つけ、その合計個数を返します。サンプルコード以下がその実装例です。const range = [6, 57]; const num = 3; const findDivisibleCount = (num = 1, [l, h]) => {    let count = 0;    for(let i = l; i <= h; i++

  2. JavaScriptで文字列内の最長連続文字とその出現回数を検索する方法

    問題文字列を受け取り、その中で最も長く連続して現れる文字とその連続回数を返すJavaScript関数を作成する必要があります。戻り値は必ず2つの要素を持つ配列とします。1つ目の要素:文字列内で最も多く連続して登場する文字2つ目の要素:その文字が連続して登場した回数解決のアプローチこの問題は、文字列を先頭から1文字ずつ走査し、隣接する文字同士を比較することで解決できます。同じ文字が続いている間はカウントを増やし、異なる文字が出現した時点でカウントをリセットします。その際、これまでに記録した最大連続回数を上回っていれば、その文字と回数を結果として保存していきます。コード例以下が実際のコードです。c