JavaScriptで配列内の連続する負の数のグループ数を数える方法
問題の概要
まず、次のような数値の配列を用意します。
const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];
ここで求められているのは、配列内で連続して出現する負の数のかたまり(グループ)の数を数えるJavaScript関数を作成することです。
上記の配列で確認してみましょう。インデックス0〜2には負の数が連続しており、これが1つ目のグループとなります。その後、インデックス4〜8にも負の数が連続しており、これが2つ目のグループです。
したがって、この配列に対しては関数は 2 を返す必要があります。
解決アプローチ
この問題は、Array.prototype.reduce() メソッドを使うことで簡潔に実装できます。配列の各要素を走査しながら、「現在の要素が負の数であり、かつ次の要素が0以上である」という条件を満たしたタイミングでカウントを1つ増やします。これにより、各負のグループの終端でのみカウントが加算されるため、グループの数を正確に求めることができます。
サンプルコード
const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];
const countNegativeGroup = arr => {
return arr.reduce((acc, val, ind) => {
if(val < 0 && arr[ind+1] >= 0){
acc++;
};
return acc;
}, 0);
};
console.log(countNegativeGroup(arr));
実行結果
コンソールには次のように出力されます。
2
コードのポイントと注意点
reduce()の初期値を0とし、アキュムレータaccでグループ数を管理しています。- 条件式
val < 0 && arr[ind + 1] >= 0は、「現在の要素が負で、直後に正または0が続く」状態、つまり負のグループの区切りを検出します。 - 注意点: 配列が負の数で終わる場合、
arr[ind + 1]はundefinedとなるため>= 0の判定がfalseになり、末尾のグループはカウントされません。末尾のグループも含めて数えたい場合は、配列のコピーの末尾に0などの番兵(センチネル)値を追加してから処理すると安全です。
-
JavaScriptのMath.max()関数とは?複数の数値から最大値を取得する方法
JavaScriptのMathオブジェクトが持つmax()関数は、引数として渡された複数の数値の中から最も大きい値(最大値)を返すメソッドです。引数に1つの数値だけを渡した場合は、その値がそのまま返されます。引数を何も渡さなかった場合は、-Infinity(負の無限大)が返されます。これは「比較対象がない」ことを意味する仕様です。構文(Syntax)Math.max()関数の基本的な構文は以下のとおりです。カンマ区切りで任意の個数の数値を指定できます。Math.max(48, 148, 3654);使用例実際にMath.max()関数を使って、3つの数値から最大値を取得するサンプルコードです。
-
JavaScriptの数値(Number)の基本と実践サンプルコード
JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co