【JavaScript】配列作成をもっとスマートに! `Array.of` メソッド徹底解説


Array.of メソッドとは?

Array.of メソッドは、ゼロ個以上の値をカンマ区切りで渡すことで、新しい配列を作成します。各値は、配列の要素として個別に格納されます。構文は以下の通りです。

Array.of(値1, 値2, ..., 値N);
const numbers = Array.of(1, 2, 3, 4, 5);
console.log(numbers); // 出力: [1, 2, 3, 4, 5]

const mixedArray = Array.of('文字列', 10, true);
console.log(mixedArray); // 出力: ['文字列', 10, true]

Array.of メソッドの利点

  • 安全性
    型推論により、要素の型を明示的に記述する必要がありません。
  • 汎用性
    配列以外にも、TypedArray やカスタムオブジェクトの作成にも使用できます。
  • 柔軟性
    さまざまなデータ型を要素として扱えます。
  • 簡潔性
    配列リテラルよりもコードが簡潔で読みやすくなります。

Array.of メソッド vs 配列リテラル

項目Array.of メソッド配列リテラル
構文Array.of(値1, 値2, ..., 値N)[値1, 値2, ..., 値N]
利点簡潔、柔軟、汎用、安全シンプル
欠点やや冗長特になし
状況複雑な配列や型推論が必要な場合シンプルな配列の場合
  • 配列の要素に undefined を含めることはできますが、null を含めることはできません
  • 引数として渡せるのは、最大32個の値です。


基本的な使い方

この例では、Array.of メソッドを使用して、数値、文字列、ブール値を含む配列を作成します。

const numbers = Array.of(1, 2, 3, 4, 5);
console.log(numbers); // 出力: [1, 2, 3, 4, 5]

const mixedArray = Array.of('文字列', 10, true);
console.log(mixedArray); // 出力: ['文字列', 10, true]

型推論

この例では、Array.of メソッドを使用して、要素の型を明示的に記述せずに配列を作成します。型推論により、各要素の型が自動的に推測されます。

const array1 = Array.of(1, 2, 3); // 型推論により、array1 は number[] 型になります。
const array2 = Array.of('文字列', 'もう一つ', '文字列3'); // 型推論により、array2 は string[] 型になります。

配列からのコピー

この例では、Array.of メソッドを使用して、既存の配列から新しい配列を作成します。元の配列は変更されません。

const originalArray = [10, 20, 30];
const newArray = Array.of(originalArray);
console.log(originalArray); // 出力: [10, 20, 30]
console.log(newArray); // 出力: [10, 20, 30]

個別の値の抽出

この例では、Array.of メソッドを使用して、関数やジェネレータの個々の戻り値を抽出して、新しい配列を作成します。

function generateNumbers() {
  for (let i = 1; i <= 5; i++) {
    yield i;
  }
}

const numbers = Array.of(...generateNumbers());
console.log(numbers); // 出力: [1, 2, 3, 4, 5]

オブジェクトからの値の抽出

この例では、Array.of メソッドを使用して、オブジェクトのプロパティ値を抽出して、新しい配列を作成します。

const obj = {
  name: 'John Doe',
  age: 30,
  occupation: 'Software Engineer'
};

const values = Array.of(obj.name, obj.age, obj.occupation);
console.log(values); // 出力: ['John Doe', 30, 'Software Engineer']

この例では、Array.from メソッドと組み合わせて、特定の範囲の値を持つ配列を作成します。

const numbers = Array.from({ length: 10 }, (_, i) => i + 1);
console.log(numbers); // 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

これらの例は、Array.of メソッドの多様性と、さまざまな状況でどのように使用できるかを示しています。

  • より複雑な配列の作成には、Array.from メソッドと組み合わせて使用することを検討してください。
  • 配列以外にも、TypedArray やカスタムオブジェクトの作成にも使用できます。
  • Array.of メソッドは、ES6 (2015) で導入されました。


配列リテラル

最も単純な代替方法は、配列リテラルを使用することです。

const numbers = [1, 2, 3, 4, 5];

利点

  • ほとんどの状況で十分
  • シンプルで分かりやすい構文

欠点

  • 型推論がサポートされないため、要素の型を明示的に記述する必要がある場合がある
  • Array.of メソッドよりも冗長になる場合がある

new Array() コンストラクタ

new Array() コンストラクタを使用して、新しい配列を作成することもできます。

const numbers = new Array(1, 2, 3, 4, 5);

利点

  • プリミティブ値をラップする必要がある場合に役立つ
  • 特定のサイズの配列を作成する必要がある場合に役立つ

欠点

  • 型推論がサポートされないため、要素の型を明示的に記述する必要がある場合がある
  • 冗長で、コードが読みづらくなる場合がある

スプレッド構文

スプレッド構文を使用して、既存のイテレータブルオブジェクトから新しい配列を作成できます。

const numbers = [...[1, 2, 3, 4, 5]];

利点

  • 既存の配列を結合したり、新しい配列に要素を追加したりするのに役立つ
  • 簡潔でエレガントな構文

欠点

  • 比較的新しい機能であり、古いブラウザではサポートされていない場合がある

Array.from() メソッド

Array.from() メソッドを使用して、イテレータブルオブジェクトから新しい配列を作成できます。

const numbers = Array.from([1, 2, 3, 4, 5]);

利点

  • 稀な値やエラーを処理する機能がある
  • マッピング関数を使用して、要素を変換する機能がある
  • スプレッド構文と似ているが、より多くの機能を提供する

欠点

  • スプレッド構文よりも冗長になる場合がある

Underscore.js や Lodash などのライブラリには、Array.of メソッドに似た機能を提供するヘルパー関数があります。これらのライブラリを使用すると、追加機能やユーティリティを利用できます。

利点

  • コードをより簡潔に記述できる場合がある
  • 追加機能やユーティリティを提供する

欠点

  • プロジェクトで既にそのライブラリを使用していない場合は、導入する必要がある
  • 外部ライブラリに依存する必要がある

Array.of メソッドは、JavaScript で新しい配列を作成するための汎用的なツールですが、状況によっては代替方法の方が適切な場合があります。上記で紹介した代替方法それぞれを検討し、要件と好み に合わせて最適な方法を選択してください。

  • コードの可読性と保守性を向上させるために、一貫したコーディングスタイルを維持することが重要です。
  • ベンチマークを使用して、さまざまな方法のパフォーマンスを比較することを検討してください。
  • 選択した方法は、パフォーマンス、コードの簡潔さ、読みやすさ、およびサポート要件などの要因によって異なる場合があります。