JavaScriptで2つの配列から連続した数列を作成できるか判定する方法
本記事では、2つの数値配列を受け取り、それらを結合して並べ替えたときに連続した整数列(連番)を形成できるかどうかを判定するJavaScript関数の作成方法を解説します。条件を満たす場合はtrue、そうでない場合はfalseを返す関数を実装していきます。
問題の概要
例えば、次のような2つの配列が与えられたとします。
const arr1 = [4, 6, 2, 9, 3]; const arr2 = [1, 5, 8, 7];
この2つの配列を結合して昇順に並べ替えると [1, 2, 3, 4, 5, 6, 7, 8, 9] となり、公差1の連続した整数列になるため、期待される出力は true です。
実装コード
それでは、実際にこの関数のコードを書いてみましょう。
const arr1 = [4, 6, 2, 9, 3];
const arr2 = [1, 5, 8, 7];
const canFormSequence = (arr1, arr2) => {
const combined = [...arr1, ...arr2];
if(combined.length < 2){
return true;
};
combined.sort((a, b) => a-b);
const commonDifference = combined[0] - combined[1];
for(let i = 1; i < combined.length-1; i++){
if(combined[i] - combined[i+1] === commonDifference){
continue;
};
return false;
};
return true;
};
console.log(canFormSequence(arr1, arr2));
出力結果
コンソールには以下のように出力されます。
true
コードの解説
この関数の処理の流れは以下の通りです。
- 配列の結合: スプレッド構文(
...)を使用して、2つの配列を1つの配列にまとめます。 - 要素数のチェック: 結合後の要素数が2未満の場合は、常に連続した数列とみなせるため
trueを返します。 - ソート処理:
sort()メソッドに比較関数を渡し、配列を昇順に並べ替えます。 - 差分の一貫性チェック: 先頭の2要素の差を基準値として保存し、ループ内で隣接するすべての要素ペアの差が同じであるかを確認します。途中で異なる差が見つかった時点で
falseを返します。
隣接する要素間の差がすべて等しければ、それは等差数列であり、公差1であれば連続した整数列ということになります。この手法により、配列の順序に関係なく正確に判定できます。
-
JavaScriptで2つの配列間の欠落した数値を見つける方法
問題の概要 2つの配列 arr1 と arr2 を引数として受け取るJavaScript関数を作成します。 arr2 は arr1 の要素をシャッフルした複製ですが、たった1つの要素だけが欠落しています。 この関数の目的は、その欠落している1つの要素を見つけ出して返すことです。 アプローチのポイント 最もシンプルかつ効率的なのは、ハッシュマップ(オブジェクト)を使って各数値の出現回数を記録する方法です。計算量は O(n) に抑えられ、配列内に重複した値が含まれていても正しく動作します。 コード例 以下が実際のコードです。 const arr1 = [6, 1, 3, 6, 8, 2];
-
JavaScriptで3つの配列に共通する要素の合計を求める方法
問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le