JavaScriptでlengthプロパティを使わずに配列の中央の要素を取得する方法
本記事では、配列の length プロパティにアクセスせず、for や while といった組み込みのループ構文も一切使わずに、配列の中央にある要素を返す関数 midElement() をJavaScriptで実装します。
求められる仕様は以下のとおりです。
- 配列の要素数が奇数の場合:中央の1つの要素を返す
- 配列の要素数が偶数の場合:中央に位置する2つの要素を配列として返す
実装コード
それでは、この関数のコードを見ていきましょう。
const arr = [14, 32, 36, 42, 45, 66, 87];
const array = [13, 92, 83, 74, 55, 46, 74, 82];
const midElement = (arr, ind = 0) => {
if(arr[ind]){
return midElement(arr, ++ind);
};
return ind % 2 !== 0 ? [arr[(ind-1) / 2]] : [arr[(ind/2)-1], arr[ind/2]];
};
console.log(midElement(arr));
console.log(midElement(array));実行結果
コンソールには次のように出力されます。
[ 42 ] [ 74, 55 ]
コードの解説
このアプローチのポイントは再帰処理にあります。具体的な流れは以下のとおりです。
midElement()は第2引数indをインデックスとして受け取り、デフォルト値は0です。arr[ind]が存在する間(つまりundefinedにならない限り)、indを1つ増やして自分自身を再帰的に呼び出します。これにより、lengthプロパティやループ構文を使わずに配列の要素数を数えることができます。arr[ind]がundefinedになった時点で、その時点のindの値が配列の要素数と一致します。- 最後に、
indが奇数か偶数かを判定します。奇数の場合は(ind-1)/2番目の要素を、偶数の場合はind/2 - 1番目とind/2番目の2つの要素を配列にして返します。
このように再帰を活用することで、length へのアクセスもループ構文も使わずに、シンプルかつ効率的に配列の中央の要素を取得できます。
-
【JavaScript入門】配列内で最初の非連続な数値を見つける方法
はじめに本記事では、JavaScriptを使って「数値の配列の中から、直前の要素と連続していない最初の数値」を見つける方法を解説します。アルゴリズムの練習やコーディング面接の対策としても役立つ基本的な問題です。 問題の定義数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、直前の要素に対して +1 となっていない(連続していない)最初の要素を返さなければなりません。 言い換えると、隣り合う要素同士の差が1以外になる箇所が現れたとき、その箇所の後ろ側の要素を返すという処理です。なお、そのような要素が必ず配列内に1つ以上存在するものとします。 サンプルコード以下は、実
-
【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法
問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou