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

JavaScriptで配列の中央要素を見つける方法

本記事では、数値の配列を受け取り、その中央に位置する要素を返すJavaScript関数の作成方法を解説します。

要件

例えば、次のような配列が与えられた場合を考えてみましょう。

const arr = [1, 2, 3, 4, 5, 6, 7];

この場合の出力は 4 になります。また、要素数が偶数の配列の場合は、中央に位置する2つの要素を配列として返します。

実装コード

この処理を実現するコードは以下の通りです。

const arr = [1, 2, 3, 4, 5, 6, 7];
const middle = function(){
    const half = this.length >> 1;
    const offset = 1 - this.length % 2;
    return this.slice(half - offset, half + 1);
};
Array.prototype.middle = middle;
console.log(arr.middle());
console.log([1, 2, 3, 4, 5, 6].middle());

出力結果

コンソールには以下のように表示されます。

[ 4 ]
[ 3, 4 ]

コードの解説

この実装のポイントは、次の2つの計算にあります。

1. half の計算

this.length >> 1 はビット右シフト演算子を使用しており、配列の長さを2で割った値の小数点以下を切り捨てた結果を求めます。これは Math.floor(this.length / 2) と同等の動作です。

2. offset の計算

1 - this.length % 2 は、配列の長さが奇数の場合は 0偶数の場合は 1 になります。これにより、偶数長の配列でも中央の2要素を正しく取得できるよう調整しています。

最後に slice() メソッドで該当範囲を切り出し、中央の要素を含む新しい配列として返します。具体的な動作は以下の通りです。

  • 奇数長(7個)の場合:half = 3offset = 0slice(3, 4) → 結果は [4]
  • 偶数長(6個)の場合:half = 3offset = 1slice(2, 4) → 結果は [3, 4]

なお、Array.prototype を直接拡張すると他のコードとの競合リスクがあるため、実務ではユーティリティ関数として独立させる方法も検討するとよいでしょう。


  1. JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説

    JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>

  2. JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方

    JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時