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

【JavaScript】reduce()で配列内の連続した数字をチェックする方法

連続する数字の判定にはreduce()を活用

100、101、102のように連続した数字が配列内に存在するかどうかを確認したい場合は、reduce()メソッドを活用するのが効果的です。この手法では、数字がすべて連続していればtrueが返され、一箇所でも連続が途切れていればfalseが返されます。

reduce()は配列の各要素を順番に畳み込みながら処理できるため、「前の要素の値+1」と「現在の要素の値」を比較し続けることで、配列全体が連続した数列になっているかを一度のループで判定できます。

コード例

const sequceIsConsecutive = (obj) =>
Boolean(obj.reduce((output, lastest) => (output ?
(Number(output.number) + 1 === Number(lastest.number) ? lastest : false)
: false)));

console.log("Is Consecutive=" + sequceIsConsecutive([{ number: '100' },
{number: '101'}, {number: '102'}]));
console.log("Is Consecutive=" + sequceIsConsecutive([{ number: '100' },
{number: '102'}, {number: '104'}]));

このコードでは、各オブジェクトのnumberプロパティをNumber()で数値に変換しながら比較しています。前の要素のnumberに1を加えた値が次の要素のnumberと一致する限り処理が続き、最後まで一致すればtrue、途中で不一致が見つかった時点でfalseが返される仕組みです。

プログラムの実行方法

上記のプログラムを実行するには、ターミナルまたはコマンドプロンプトで以下のコマンドを使用します。

node fileName.js

ここでは、ファイル名をdemo126.jsとして保存したものとします。

実行結果

このプログラムを実行すると、以下のような出力が得られます。

PS C:\Users\Amit\JavaScript-code> node demo126.js
Is Consecutive=true
Is Consecutive=false

最初の例は「100 → 101 → 102」と1ずつ増加しているためtrueが返されます。一方、2番目の例は「100 → 102 → 104」と2ずつ増えている飛び番のため、falseが返されています。

ポイントまとめ

  • reduce()を使えば追加のループやフラグ変数なしに連続性を判定できる
  • 文字列形式の数値もNumber()で変換してから比較することで正確に判定できる
  • Boolean()で包むことで、reduce()の戻り値を必ず真偽値として扱える
  1. JavaScriptで配列内の連続する数値ペアの個数を数える方法

    問題整数の配列を受け取るJavaScript関数を作成します。この関数は、配列の中から「隣接する2つの要素の値が連続している(差が±1)」ペアの個数を数えて返す必要があります。アプローチ最もシンプルな方法は、配列を先頭から順に走査しながら、インデックス i と i+1 の要素を1組として比較していくことです。ループ変数を2ずつ増やすことで、同じ要素を重複してチェックすることなく各ペアを検証できます。2つの要素の差が1であれば、そのペアは「連続した数値」とみなし、カウンターを1つ増やします。コード例以下が実際のコードです。const arr = [1, 2, 5, 8, -4, -3, 7, 6

  2. C++で数値が連続する整数の和として表現できるか判定する方法

    この記事では、ある数値が2つ以上の連続する整数の和として表現できるかどうかを判定する方法を解説します。例えば、12は「3 + 4 + 5」のように表現できます。 この問題には、非常にシンプルで効率的な解法があります。鍵となるのは次の性質です。「2の累乗である数は、連続する整数の和として表現できない」というものです。この性質を理解するために、以下の2つの事実を押さえておきましょう。 任意の2つの連続する整数の和は必ず奇数になります。これは、一方が奇数でもう一方が偶数であるためです。 2n = 2(n-1) + 2(n-1) という関係が常に成り立ちます。 これらの事実から、2の累乗は1以外の