JavaScriptで配列の指定位置からn個の数値を取得する関数を実装する方法
本記事では、3つの引数を受け取る配列関数 Array.prototype.get() を実装していきます。第1引数は取得する要素数を表す数値 n、第2引数は開始位置を表す数値 m(m は配列の長さ − 1 以下である必要があります)、第3引数は「left」または「right」のいずれかの値を持つ文字列です。
この関数は、元の配列のうち、インデックス m を起点として指定された方向(left なら左、right なら右)に向かって n 個の要素を含む部分配列を返します。重要なのは、配列の端に達したら反対側の端へ折り返す(循環する)という仕様です。
期待される動作
たとえば、次のようなケースを考えてみましょう。
// 対象となる配列が次の場合: const arr = [0, 1, 2, 3, 4, 5, 6, 7]; // 関数を次のように呼び出すと: arr.get(4, 6, 'right'); // 出力は次のようになるべきです: const output = [6, 7, 0, 1];
開始インデックスが 6 なので、まず 6 を取得し、右方向へ進んで 7 を取得します。ここで配列の末尾に達しましたが、そこで終わらずに先頭へ折り返し、続けて 0 と 1 を取得します。それでは、実際のコードを見ていきましょう。
実装例
const arr = [0, 1, 2, 3, 4, 5, 6, 7];
Array.prototype.get = function(num, ind, direction){
const amount = direction === 'left' ? -1 : 1;
if(ind > this.length-1){
return false;
};
const res = [];
for(let i = ind, j = 0; j < num; i += amount, j++){
if(i > this.length-1){
i = i % this.length;
};
if(i < 0){
i = this.length-1;
};
res.push(this[i]);
};
return res;
};
console.log(arr.get(4, 6, 'right'));
console.log(arr.get(9, 6, 'left'));
コードのポイント
- 方向の決定: direction が 'left' の場合は増減幅 amount を -1 に、それ以外の場合は 1 に設定し、ループごとのインデックス移動方向を切り替えています。
- 引数の妥当性チェック: 開始インデックス ind が配列の範囲外(this.length - 1 より大きい)であれば false を返して処理を中断します。
- 循環(ラップアラウンド)処理: インデックス i が配列の末尾を超えた場合は剰余演算 i % this.length によって先頭に戻し、負の値になった場合には this.length - 1 にリセットします。これにより、配列を環状構造のように扱うことができます。
- 結果の組み立て: 条件に合致した要素を順に res 配列へ追加し、num 個に達した時点で結果を返します。
出力
コンソールには次のように表示されます。
[ 6, 7, 0, 1 ]
[
6, 5, 4, 3, 2,
1, 0, 7, 6
]
最初の呼び出しでは、インデックス 6 を起点に右方向へ 4 つの要素(6, 7, 0, 1)を取得しています。一方、2つ目の呼び出しでは同じくインデックス 6 を起点に左方向へ 9 つの要素を取得しています。要求した要素数(9)が配列の長さ(8)を超えていても、循環処理のおかげで正しく折り返しながら要素を取得できていることが分かります。
-
【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説
JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio
-
JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説
Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g