JavaScriptでの配列要素の変更
JavaScriptでは配列を操作するための便利なメソッドが多数提供されています。今回は、`array.fill()`, `array.copyWithin()`, `array.flat()`, `array.flatMap()`について、具体的な例を交えて解説します。
array.fill() メソッド
array.fill(value[, start[, end]])
は、配列の指定された位置から別の値で埋めるメソッドです。このメソッドは元の配列を変更します。
このメソッドは3つの引数を取ります。
- value: 配列に埋め込む値。
- start: 配列の埋め始める位置(省略可能)。デフォルトは0。
- end: 配列の埋め終わる位置(省略可能)。デフォルトは配列の長さ。
例1:
const arr = [1, 2, 3, 4, 5];
arr.fill(0, 2, 4); // [1, 2, 0, 0, 5]
上記の例では、配列のインデックス2からインデックス4まで(4は含まない)を0で埋めています。
例2:
const arr = [1, 2, 3];
arr.fill(9); // [9, 9, 9]
引数を1つだけ渡した場合、配列全体がその値で埋められます。
array.copyWithin() メソッド
array.copyWithin(target[, start[, end]])
は、配列の一部を別の位置にコピーするメソッドです。これも元の配列を変更します。
引数は以下の通りです。
- target: コピーしたデータを挿入する位置。
- start: コピー元の開始位置(省略可能)。デフォルトは0。
- end: コピー元の終了位置(省略可能)。デフォルトは配列の長さ。
例1:
const arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3, 5); // [4, 5, 3, 4, 5]
この例では、インデックス3からインデックス5まで(5は含まない)の要素を、インデックス0から始まる位置にコピーしています。
例2:
const arr = [1, 2, 3, 4, 5];
arr.copyWithin(2, 0, 2); // [1, 2, 1, 2, 5]
ここでは、最初の2つの要素(1と2)を、インデックス2から始まる位置にコピーしています。
array.flat() メソッド
array.flat(depth)
は、ネストされた配列を平坦化するためのメソッドです。
depthは、どれだけ深くネストされているかを指定するオプションの引数で、省略した場合は1がデフォルトです。
例1:
const arr = [1, [2, 3], [4, 5]];
arr.flat(); // [1, 2, 3, 4, 5]
この例では、配列が1回の階層でネストされているため、1回のフラット化で全ての要素が出てきます。
例2:
const arr = [1, [2, [3, 4]]];
arr.flat(2); // [1, 2, 3, 4]
こちらでは2階層のネストをフラット化するため、depth
に2を指定しています。
array.flatMap() メソッド
array.flatMap(callback)
は、配列の各要素に対して指定されたコールバック関数を実行し、結果をフラット化して返すメソッドです。
通常のmap()
メソッドは、結果として新しい配列を生成しますが、flatMap()
はその結果を1段階だけフラット化します。
例1:
const arr = [1, 2, 3];
arr.flatMap(x => [x, x * 2]); // [1, 2, 2, 4, 3, 6]
上記の例では、各要素に対して配列を返す関数を適用し、結果として配列が1段階フラット化されています。
例2:
const arr = [[1, 2], [3, 4]];
arr.flatMap(x => x); // [1, 2, 3, 4]
ここでは、2次元配列を1次元にフラット化する例です。