JavaScriptで配列の中央の要素を取得する方法を解説
JavaScriptでは、数値の配列を受け取り、その中央に位置する要素を返す関数を簡単に作成できます。
配列の中央の要素とは
たとえば、次のような配列があったとします。
const arr = [1, 2, 3, 4, 5, 6, 7];
この場合、中央に位置する要素は 4 となります。要素数が奇数の場合は中央の1つの要素が、偶数の場合は中央に近い2つの要素が該当します。
実装コード例
以下は、Array.prototype を拡張してどの配列からでも中央の要素を取得できるようにしたコード例です。
const arr = [1, 2, 3, 4, 5, 6, 7];
const middle = function () {
const half = this.length >> 1; // 長さを2で割った値(ビットシフト)
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());コードのポイント
- this.length >> 1:右ビットシフトを使うことで、配列の長さを2で割り、中央位置のインデックスを高速に算出しています。
- offset の調整:要素数が奇数の場合は中央の1要素、偶数の場合は中央の2要素を返すように、slice の範囲を動的に変更しています。
実行結果
このコードをコンソールで実行すると、次の出力が得られます。
[ 4 ] [ 3, 4 ]
最初の結果は要素数7の配列(奇数)なので中央の [ 4 ]、2つ目は要素数6の配列(偶数)なので中央の2要素 [ 3, 4 ] が返されています。
まとめ
ビットシフトと剰余演算を組み合わせることで、配列の要素数が奇数か偶数かに関わらず、柔軟に中央の要素を取得できます。頻繁に利用する場合は、今回のようにプロトタイプへ追加しておくと便利ですが、組み込みオブジェクトの拡張は他のコードとの競合に注意して使用しましょう。
-
JavaScriptで配列の要素を同じ配列内に複製する方法
JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont
-
JavaScriptで多次元配列の共通要素(積集合)を求める方法
本記事では、文字列や数値といったリテラル値の配列を複数含む多次元配列を受け取り、すべてのサブ配列に共通して存在する要素だけを抜き出した「交差(積集合)」の配列を返すJavaScript関数の作り方を解説します。要件の確認まずは、次のような2つのサブ配列を持つ多次元配列を例に考えてみましょう。const arr = [ [garden, canons, philips, universal], [universal, ola, uber, bangalore] ];この場合、両方のサブ配列に共通して存在する要素は universal の1つだけです。つまり、作成する関数は次の結果