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

JavaScriptで配列が狭義単調増加または減少しているかを判定する方法

はじめに

数学において、狭義単調増加関数(strictly increasing function)とは、プロットされる値が常に増加し続ける関数のことを指します。同様に、狭義単調減少関数(strictly decreasing function)とは、プロットされる値が常に減少し続ける関数のことです。

本記事では、数値の配列を受け取り、その配列が狭義単調増加または狭義単調減少のいずれかであれば true を返し、そうでなければ false を返すJavaScript関数を作成します。

実装の考え方

判定には隣接する3つの要素を使います。3点 a, b, c について、(b - a) と (c - b) の符号が同じであれば、その部分は一方向に増加(または減少)していると判断できます。この条件を配列全体にわたって確認し、一度でも符号が異なる箇所があれば false を返します。

また、要素が2つ以下の配列は必ず条件を満たすため、最初に true を返します。

コード例

以下が実際のコードです。

const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const arr2 = [12, 45, 67, 89, 123, 144, 2656, 5657];

const sameSlope = (a, b, c) =>
  (b - a < 0 && c - b < 0) || (b - a > 0 && c - b > 0);

const increasingOrDecreasing = (arr = []) => {
  if(arr.length <= 2){
    return true;
  };
  for(let i = 1; i < arr.length - 1; i++){
    if(sameSlope(arr[i-1], arr[i], arr[i+1])){
      continue;
    };
    return false;
  };
  return true;
};

console.log(increasingOrDecreasing(arr));
console.log(increasingOrDecreasing(arr2));

出力結果

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

false
true

解説

  • arr の場合:12 → 45 は増加していますが、45 → 6 は減少しているため、途中で傾きの向きが変わります。よって false が返されます。
  • arr2 の場合:すべての隣接要素間で値が増加し続けているため、true が返されます。

なお、等しい値が連続する場合(例:23 → 23)は差が0になるため sameSlope の条件を満たさず、false となります。これにより「厳密な」増加・減少のみを正しく判定できる仕組みになっています。

  1. JavaScriptの配列some()メソッドの使い方をわかりやすく解説

    JavaScriptのArray.some()メソッドは、配列の要素の中に、指定されたテスト(条件)を満たすものが「1つでも存在するかどうか」を判定するためのメソッドです。ここでいうテストとは、配列の各要素に対して順番に実行されるコールバック関数のことを指します。コールバック関数が1つでもtrueを返した時点でsome()はtrueを返し、すべての要素が条件を満たさなかった場合はfalseを返します。なお、空の配列に対して呼び出した場合は常にfalseを返すという仕様になっている点にも注意しましょう。some()メソッドのサンプルコード以下は、配列のsome()メソッドを使った具体的な実装例で

  2. 【JavaScript】関数から返された配列にアクセスする方法

    JavaScriptでは、関数の戻り値として配列を返し、呼び出し元でその配列を受け取って自由に操作することができます。本記事では、関数から返された配列へアクセスする具体的な方法を、実際に動作するサンプルコードとともに解説します。 実装例:関数から配列を返してアクセスする 以下のサンプルでは、引数に渡された数値の1倍〜10倍の値を要素とする配列を生成して返すretTable()関数を定義しています。ボタンをクリックすると、この関数が返した配列を変数で受け取り、画面に表示します。 <!DOCTYPE html> <html lang=ja> <head> &l