JavaScriptで文字列配列が1文字ずつ段階的に成長しているか判定する方法
本記事では、長さが短い順(昇順)に並べられた文字列の配列を受け取るJavaScript関数を作成します。
この関数は、隣り合うすべての文字列のペアについて、「後ろの文字列が、前の文字列の先頭または末尾に1文字追加することで生成できる」場合に true を返します。
例えば、次のような配列が与えられたとしましょう。
const arr = ["c", "ca", "can", "acan", "acane", "dacane"];
この場合、関数は true を返す必要があります。それでは、実際のコードを見ていきましょう。
実装例
コードは以下の通りです。
const arr = ["c", "ca", "can", "acan", "acane", "dacane"];
const isProgressive = arr => {
for(let i = 0; i < arr.length-1; i++){
const nextLength = arr[i+1].length;
if(arr[i+1] === arr[i+1][0] + arr[i] || arr[i+1] === arr[i] + arr[i+1][nextLength-1]){
continue;
};
return false;
};
return true;
};
console.log(isProgressive(arr));出力結果
コンソールには以下のように表示されます。
true
コードの解説
この関数の仕組みはとてもシンプルです。forループを使い、配列内の隣接する文字列のペアを先頭から順番にチェックしていきます。
- まず、次の文字列(arr[i+1])の長さを取得します。
- 続いて、「次の文字列の先頭1文字 + 現在の文字列」と一致するか(先頭に1文字追加されたケース)、または「現在の文字列 + 次の文字列の末尾の1文字」と一致するか(末尾に1文字追加されたケース)を確認します。
- どちらの条件も満たさない場合は、その時点で false を返して処理を終了します。
すべてのペアが条件を満たしていれば、最後に true を返します。これにより、配列全体が「1文字ずつ段階的に成長している」系列になっているかどうかを、線形時間(O(n))で効率よく判定できます。単語の連鎖や辞書的な語形成パターンのバリデーションなど、さまざまな場面で応用できるテクニックです。
-
JavaScriptのArray.prototype.map()メソッドの使い方を徹底解説
Array.prototype.map()とは? JavaScriptのArray.prototype.map()メソッドは、配列の各要素に対してコールバック関数を実行し、その戻り値から新しい配列を作成するためのメソッドです。元の配列は変更されないため、安全にデータ変換を行いたい場合に非常に便利です。 構文 arr.map(function callback(currentValue[, index[, array]]) 各引数の意味は以下のとおりです。 currentValue:現在処理している要素の値 index(省略可能):現在処理している要素のインデックス番号 array(省略可能
-
JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介
JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の