JavaScriptで2次元配列の各行の最小値の合計を求める方法
問題
数値を要素とする2次元配列を受け取るJavaScript関数を作成します。この関数は、配列の各行から最小値を1つずつ取り出し、最終的にそれらの合計を返す必要があります。
アプローチ
実装の手順は非常にシンプルです。
- 各行(部分配列)ごとに最小値を求める
- 求めた最小値を順番に加算していく
- 合計値を返す
行内の最小値の計算には、reduce() メソッドと Math.min() を組み合わせるのが便利です。
コード例
以下は実際のコードです。
const arr = [
[2, 5, 1, 6],
[6, 8, 5, 8],
[3, 6, 7, 5],
[9, 11, 13, 12]
];
const sumSmallest = (arr = []) => {
const findSmallest = array => array.reduce((acc, val) => {
return Math.min(acc, val);
}, Infinity)
let sum = 0;
arr.forEach(sub => {
sum += findSmallest(sub);
});
return sum;
};
console.log(sumSmallest(arr));
コードの解説
- findSmallest関数:
reduce()の初期値をInfinityに設定することで、どのような数値の配列でも正しく最小値を求められます。 - forEach()による走査: 各部分配列に対して
findSmallestを呼び出し、その戻り値を変数sumに加算しています。
出力結果
18
各行の最小値はそれぞれ 1、5、3、9 となり、これらの合計である 18 が出力されます。
より簡潔な別の書き方
Math.min() とスプレッド構文(...)、reduce() を組み合わせれば、以下のようにさらに短く記述できます。
const sumSmallest = (arr = []) =>
arr.reduce((sum, row) => sum + Math.min(...row), 0);
console.log(sumSmallest(arr)); // 18
こちらの書き方では、map() と Math.min(...row) で各行の最小値を直接求められるため、補助関数が不要になり、コードの意図もより明確になります。用途やチームのコーディング規約に応じて、読みやすい方を選択するとよいでしょう。
-
JavaScriptで配列内の時刻の最小時間差を求める方法
問題概要JavaScriptで、24時間制の時刻を「時:分」形式で表した文字列の配列を受け取る関数を作成します。この関数の目的は、配列内の任意の2つの時刻の組み合わせの中から、最も小さい時間差(分単位)を見つけ出すことです。例えば、次のような入力が与えられたとします。const arr = [23:59,00:00];この場合、期待される出力は以下の通りです。const output = 1;これは、「23:59」と翌日の「00:00」の間の時間差がわずか1分であるためです。時刻は一日の中で循環することを考慮する必要がある点に注意してください。解決のアプローチこの問題を効率的に解くためには、以
-
【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法
問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou