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

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 などの番兵(センチネル)値を追加してから処理すると安全です。
  1. JavaScriptのMath.max()関数とは?複数の数値から最大値を取得する方法

    JavaScriptのMathオブジェクトが持つmax()関数は、引数として渡された複数の数値の中から最も大きい値(最大値)を返すメソッドです。引数に1つの数値だけを渡した場合は、その値がそのまま返されます。引数を何も渡さなかった場合は、-Infinity(負の無限大)が返されます。これは「比較対象がない」ことを意味する仕様です。構文(Syntax)Math.max()関数の基本的な構文は以下のとおりです。カンマ区切りで任意の個数の数値を指定できます。Math.max(48, 148, 3654);使用例実際にMath.max()関数を使って、3つの数値から最大値を取得するサンプルコードです。

  2. JavaScriptの数値(Number)の基本と実践サンプルコード

    JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co