JavaScript Array の fill メソッド: ループはもう古い!fill メソッドでスマートに書き換えよう

2024-04-02

JavaScript Array の fill メソッド

メソッドの概要

構文

array.fill(value, start = 0, end = array.length);

引数

  • value: 配列の要素を書き換える値
  • start: 書き換えを開始するインデックス (省略可能、デフォルトは 0)
  • end: 書き換えを終了するインデックス (省略可能、デフォルトは array.length)

戻り値

書き換えられた配列

メソッドの動作

  • start から end までの範囲の要素を value で書き換えます。
  • end は省略可能で、省略すると配列の最後の要素まで書き換えられます。
  • start は負の値も指定でき、その場合は配列の末尾から数えて開始します。
  • endstart よりも小さい値を指定することもでき、その場合は start から end までの要素のみ書き換えられます。
  • value は、数値、文字列、オブジェクトなど、任意の値を指定できます。

メソッドの例

// 配列をすべて "X" で埋める
const arr1 = ["a", "b", "c"];
arr1.fill("X");
console.log(arr1); // ["X", "X", "X"]

// 配列の後半を 10 で埋める
const arr2 = [1, 2, 3, 4, 5];
arr2.fill(10, 2);
console.log(arr2); // [1, 2, 10, 10, 10]

// 配列を負のインデックスから書き換える
const arr3 = [0, 1, 2, 3, 4];
arr3.fill("X", -2);
console.log(arr3); // [0, 1, 2, "X", "X"]

メソッドの利点

  • 配列の要素をループで書き換える必要がなく、簡潔にコードを書ける
  • 繰り返し処理を省略できるため、コードの見通しが良くなる
  • 配列の長さに関わらず、効率的に書き換えられる

メソッドの注意点

  • value で指定した値は、配列の要素に直接書き換えられます。
  • 配列の要素をコピーしたい場合は、slice メソッドなどを使用する必要があります。
  • 配列の要素がオブジェクトの場合、value で指定したオブジェクトへの参照がすべての要素に設定されます。

array.fill メソッドは、JavaScript の Array オブジェクトで使用できる便利なメソッドです。このメソッドを理解することで、配列の要素を効率的に書き換えることができます。



JavaScript Array の fill メソッド サンプルコード

基本的な使い方

// 配列をすべて "X" で埋める
const arr1 = ["a", "b", "c"];
arr1.fill("X");
console.log(arr1); // ["X", "X", "X"]

// 配列の後半を 10 で埋める
const arr2 = [1, 2, 3, 4, 5];
arr2.fill(10, 2);
console.log(arr2); // [1, 2, 10, 10, 10]

// 配列を負のインデックスから書き換える
const arr3 = [0, 1, 2, 3, 4];
arr3.fill("X", -2);
console.log(arr3); // [0, 1, 2, "X", "X"]

条件付きで書き換える

// 奇数番目の要素を "X" で埋める
const arr = [1, 2, 3, 4, 5];
arr.fill("X", (i) => i % 2 === 1);
console.log(arr); // [1, "X", 3, "X", 5]

ランダムな値で埋める

// 配列をランダムな数値で埋める
const arr = new Array(10);
arr.fill(() => Math.floor(Math.random() * 100));
console.log(arr); // [ランダムな数値 10 個]

オブジェクトで埋める

// 配列をオブジェクトで埋める
const obj = { name: "John", age: 30 };
const arr = new Array(3).fill(obj);
console.log(arr); // [{ name: "John", age: 30 }, { name: "John", age: 30 }, { name: "John", age: 30 }]

配列のコピー

// 配列のコピーを作成する
const original = [1, 2, 3];
const copy = original.slice(); // 浅いコピー
const copy2 = original.fill(); // 浅いコピー
console.log(copy); // [1, 2, 3]
console.log(copy2); // [1, 2, 3]

// オブジェクトを含む配列のコピーを作成する
const original = [{ name: "John", age: 30 }];
const copy = original.slice(); // 浅いコピー
const copy2 = original.fill(); // 浅いコピー
console.log(copy); // [{ name: "John", age: 30 }]
console.log(copy2); // [{ name: "John", age: 30 }]

// オブジェクトの深いコピーを作成する
const original = [{ name: "John", age: 30 }];
const copy = JSON.parse(JSON.stringify(original)); // 深いコピー
const copy2 = original.map(obj => ({ ...obj })); // 深いコピー
console.log(copy); // [{ name: "John", age: 30 }]
console.log(copy2); // [{ name: "John", age: 30 }]
  • fill メソッドは、配列の 破壊的な メソッドです。
  • fill メソッドは、イテレータも受け付けます。
  • fill メソッドは、TypedArray でも使用できます。


JavaScript Array の要素を書き換える他の方法

ループを使用する

// 配列のすべての要素を "X" で書き換える
const arr = ["a", "b", "c"];
for (let i = 0; i < arr.length; i++) {
  arr[i] = "X";
}
console.log(arr); // ["X", "X", "X"]

// 配列の後半を 10 で書き換える
const arr2 = [1, 2, 3, 4, 5];
for (let i = 2; i < arr2.length; i++) {
  arr2[i] = 10;
}
console.log(arr2); // [1, 2, 10, 10, 10]

map メソッドを使用する

// 配列のすべての要素を "X" で書き換える
const arr = ["a", "b", "c"];
const newArr = arr.map(() => "X");
console.log(newArr); // ["X", "X", "X"]

// 配列の後半を 10 で書き換える
const arr2 = [1, 2, 3, 4, 5];
const newArr2 = arr2.map((e, i) => (i >= 2 ? 10 : e));
console.log(newArr2); // [1, 2, 10, 10, 10]

reduce メソッドを使用する

// 配列のすべての要素を "X" で書き換える
const arr = ["a", "b", "c"];
const newArr = arr.reduce((acc, cur) => [...acc, "X"], []);
console.log(newArr); // ["X", "X", "X"]

// 配列の後半を 10 で書き換える
const arr2 = [1, 2, 3, 4, 5];
const newArr2 = arr2.reduce((acc, cur, i) => (i >= 2 ? [...acc, 10] : [...acc, cur]), []);
console.log(newArr2); // [1, 2, 10, 10, 10]

それぞれの方法の比較

方法メリットデメリット
ループシンプル冗長
map簡潔新しい配列を作成する
reduce簡潔少し複雑
fill簡潔配列を破壊する
  • シンプルさを求める場合は、ループ または map メソッドがおすすめです。
  • 配列の長さに関わらず効率的に処理したい場合は、fill メソッドがおすすめです。
  • 複雑な条件で書き換えたい場合は、reduce メソッドがおすすめです。



JavaScript Arrayの階層構造を自在に操る: array.flat メソッド

array. flat メソッドは、以下の機能を提供します。配列の要素を再帰的に展開し、1つの配列に結合するオプションで、展開する深さを指定できるES2019で導入された従来の方法と比較すると、以下の利点があります。コードが簡潔になる処理速度が速い場合がある



配列風オブジェクトから簡単に配列を作成! JavaScript Array.from の使い方

従来の配列リテラルやArrayコンストラクタと比較して、Array. fromは以下のような利点があります。配列風オブジェクトから簡単に配列を作成できる例えば、NodeListやStringなど、配列ではないオブジェクトでも、Array. fromを使えば簡単に配列に変換できます。


JavaScript初心者必見!Date.setUTCMillisecondsメソッドを徹底解説

メソッドの役割Date. setUTCMillisecondsメソッドは、以下の2つの役割を担います。既存の日付時刻のミリ秒部分を変更する: すでに作成済みのDateオブジェクトに対して、ミリ秒単位で時刻を調整できます。新しい日付時刻を作成する: 引数にミリ秒値のみを渡すことで、ミリ秒単位の精度で新しいDateオブジェクトを作成できます。


JavaScript DateオブジェクトのsetHoursメソッドで時間を自在に操ろう!

DateオブジェクトのsetHoursメソッドは、日付オブジェクトの時刻をローカル時間に基づいて設定するために使用されます。メソッドの構成引数hoursValue: 設定する時(0~23の範囲)minutesValue: 設定する分(省略可、0~59の範囲)


JavaScriptでその他の便利なメソッドを活用する

時間: 24時間表記で、先頭にゼロパディングされた 2 桁の数字で表現されます。分: 先頭にゼロパディングされた 2 桁の数字で表現されます。時間帯: GMT (グリニッジ標準時) とのオフセットを、符号 (+/-)と 4 桁の数字で表現されます。



JavaScript Date.setUTCSeconds() の詳細解説

Date. setUTCSeconds() は、JavaScript の Date オブジェクトのメソッドであり、UTC 時間に基づいて秒を設定するために使用されます。オプションでミリ秒も設定できます。構文パラメータsecondsValue: 設定する秒の値。0 から 59 までの整数です。


String.fromCodePoint 以外にも知っておきたい、Unicodeコードポイントから文字列を作成する方法

例:使い方:String. fromCodePoint() を呼び出します。引数として、1つ以上のUnicodeコードポイントを渡します。コードポイントは10進数、16進数、または文字列リテラルで指定できます。詳細:Unicodeコードポイントは、0から1114111までの整数です。


協定世界時 (UTC)

Date. getUTCMilliseconds()メソッドは、JavaScriptの「Date」オブジェクトにおいて、**協定世界時 (UTC)**におけるミリ秒単位の時刻を取得するために使用されます。ミリ秒は、1秒の1000分の1を指します。


JavaScript Map オブジェクトとは?

keys() メソッドは、Map オブジェクトのすべてのキーをイテレータとして返します。イテレータは、for. ..of ループを使って要素を順番に取り出すことができます。オブジェクトのキーをループ処理する際に、Object. keys() メソッドよりも効率的です。


【完全ガイド】JavaScript Date.setFullYear:日付操作をマスターするための詳細解説

使い方パラメータyear: 設定したい年month (オプション): 設定したい月 (0から11までの数値)date (オプション): 設定したい日 (1から31までの数値)注意点month と date を省略した場合、デフォルトで1月1日になります。