JavaScriptで多次元配列内の要素の出現回数を再帰的にカウントする方法
文字列がネストされた多次元配列が与えられたとき、その配列と検索対象の文字列を受け取り、指定した文字列が配列内に出現する回数を返す関数を書く必要があります。
実装のアプローチ
この問題を解決するには再帰処理を使用します。ネストされた配列の中身も探索できるよう、Array.isArray()メソッドで要素が配列かどうかを判定し、配列であれば自分自身を呼び出して再帰的にカウントを続けます。
具体的な流れは以下のとおりです。
- ループで各要素を順番にチェックする
- 要素が検索文字列と一致すれば、カウンターを1つ増やす
- 要素が配列であれば、その配列に対して同じ関数を再帰的に実行し、結果を合計に加算する
コード例
const arr = [
"apple",
["banana", "strawberry", "dsffsd", "apple"],
"banana",
["sdfdsf", "apple", ["apple", ["nonapple", "apple", ["apple"]]]]
,"apple"];
const calculateCount = (arr, query) => {
let count = 0;
for(let i = 0; i < arr.length; i++){
if(arr[i] === query){
count++;
continue;
};
if(Array.isArray(arr[i])){
count += calculateCount(arr[i], query);
}
};
return count;
};
console.log(calculateCount(arr, "apple"));
コードの解説
calculateCount関数は2つの引数を受け取ります。1つ目は探索対象の配列、2つ目は検索したい文字列です。関数内部ではまずカウンター変数countを0で初期化し、forループで各要素を走査します。
要素が検索文字列と完全に一致した場合はcountをインクリメントし、continueで次の反復へ進みます。一致しなかった場合でも、その要素が配列であるかをArray.isArray()で確認し、配列であれば再帰呼び出しによってその中も探索します。これにより、どれだけ深くネストされた配列でも漏れなくカウントできます。
実行結果
上記のコードをコンソールで実行すると、以下の出力が得られます。
7
サンプル配列には「apple」がトップレベルに2回、ネストされた各階層にも含まれており、合計7回出現しているため、正しく「7」が出力されます。なお、「nonapple」のような部分一致ではなく完全一致での判定を行うため、「nonapple」はカウントされません。
-
JavaScriptの配列から特定の要素を削除する方法を徹底解説
JavaScriptでプログラミングをしていると、数値が格納された配列から特定の要素だけを削除したい場面によく出くわします。例えば、次のような配列から「5」という値をすべて取り除きたい場合などです。const arr = [2, 5, 9, 1, 5, 8, 5];この記事では、フレームワークに頼らず、素のJavaScript(コアJavaScript)だけで実装する方法を解説します。目標は、以下のように直感的に呼び出せるメソッドを作ることです。array.remove(値); splice()を使った削除メソッドの実装 配列から要素を削除する際に便利なのが、Arrayオブジェクトが標準で持
-
JavaScriptで各要素より小さい数の個数を数えて配列を作成する方法
JavaScriptで、数値の配列を引数として受け取る関数を作成する必要があります。 この関数は、入力された配列をもとに新しい配列を構築します。新しい配列の各要素には、元の配列において「その要素よりも小さい値を持つ要素の個数」が格納されます。 処理のイメージ 例えば、入力配列が次のようになっているとします。 const arr = [2, 7, 3, 1, 56, 4, 7, 8]; この場合、出力される配列は次のようになります。 const output = [1, 4, 2, 0, 7, 3, 4, 6]; それぞれの値がどのように求められているか見てみましょう。 最初の要素 2:自分よ