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

2024-04-02

JavaScript Array.from とは?

従来の配列リテラルやArrayコンストラクタと比較して、Array.fromは以下のような利点があります。

配列風オブジェクトから簡単に配列を作成できる

例えば、NodeListやStringなど、配列ではないオブジェクトでも、Array.fromを使えば簡単に配列に変換できます。

// NodeListから配列を作成
const nodeList = document.querySelectorAll('.target');
const arr = Array.from(nodeList);

// Stringから配列を作成
const str = 'Hello World!';
const arr = Array.from(str);

反復可能オブジェクトから簡単に配列を作成できる

MapやSetなど、反復可能なオブジェクトからも、Array.fromを使って簡単に配列を作成できます。

// Mapから配列を作成
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const arr = Array.from(map);

// Setから配列を作成
const set = new Set([1, 2, 3, 4, 5]);
const arr = Array.from(set);

マップ関数と組み合わせて、変換処理を簡潔に記述できる

Array.fromは、引数としてマップ関数を渡すことで、要素変換処理を同時に実行できます。

// 数字の配列を作成し、各要素に2を乗算する
const arr = Array.from(Array(5), (_, i) => i * 2);
console.log(arr); // [0, 2, 4, 6, 8]

オプション引数で、配列の初期値を設定できる

Array.fromは、2番目の引数として初期値を設定できます。

// 3つの要素を持つ空の配列を作成
const arr = Array.from(3);
console.log(arr); // [undefined, undefined, undefined]

// 3つの要素を持つ、値が1の配列を作成
const arr = Array.from(3, () => 1);
console.log(arr); // [1, 1, 1]

Array.from の使い方

Array.fromは、以下の構文で使用します。

Array.from(iterable, [mapFunc], [thisArg])
  • iterable: 配列風オブジェクトまたは反復可能オブジェクト
  • mapFunc: オプション。各要素を変換する関数
  • thisArg: オプション。mapFuncのthisオブジェクト

Array.from の注意点

  • 配列風オブジェクトや反復可能オブジェクトでない場合は、TypeError例外が発生します。
  • mapFuncで返された値は、必ず配列に追加されます。undefinedやnullであっても、空要素にはなりません。

Array.fromは、配列風オブジェクトや反復可能オブジェクトから簡単に配列を作成できる便利な関数です。従来の配列リテラルやArrayコンストラクタよりも簡潔で柔軟な記述が可能なので、ぜひ使いこなしてみましょう。



Array.from サンプルコード

配列風オブジェクトから配列を作成

NodeList

// HTML要素のリストを取得
const nodeList = document.querySelectorAll('.target');

// NodeListから配列を作成
const arr = Array.from(nodeList);

// 配列の内容を出力
console.log(arr);

String

// 文字列を分割
const str = 'Hello World!';

// Stringから配列を作成
const arr = Array.from(str);

// 配列の内容を出力
console.log(arr);

反復可能オブジェクトから配列を作成

Map

// Mapを作成
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);

// Mapから配列を作成
const arr = Array.from(map);

// 配列の内容を出力
console.log(arr);

Set

// Setを作成
const set = new Set([1, 2, 3, 4, 5]);

// Setから配列を作成
const arr = Array.from(set);

// 配列の内容を出力
console.log(arr);

マップ関数で要素変換

// 数字の配列を作成し、各要素に2を乗算する
const arr = Array.from(Array(5), (_, i) => i * 2);

// 配列の内容を出力
console.log(arr);

オプション引数で初期値を設定

空の配列

// 3つの要素を持つ空の配列を作成
const arr = Array.from(3);

// 配列の内容を出力
console.log(arr);

値が1の配列

// 3つの要素を持つ、値が1の配列を作成
const arr = Array.from(3, () => 1);

// 配列の内容を出力
console.log(arr);

配列の要素を逆順にする

// 数字の配列を作成
const arr = Array.from(Array(5), (_, i) => i);

// 配列を逆順にする
const reversedArr = arr.reverse();

// 配列の内容を出力
console.log(reversedArr);

配列の重複要素を除く

// 数字の配列を作成
const arr = [1, 2, 3, 1, 2, 4];

// 配列の重複要素を除く
const uniqueArr = Array.from(new Set(arr));

// 配列の内容を出力
console.log(uniqueArr);


Array.from の代替方法

スプレッド構文は、イテレータを展開して配列を作成する簡潔な方法です。

const arr = [...nodeList];
const arr = [...str];

ただし、スプレッド構文は、ES6以降のブラウザでのみ使用可能です。

Array コンストラクタは、配列リテラルよりも柔軟に配列を作成できます。

const arr = new Array(nodeList.length);
for (let i = 0; i < nodeList.length; i++) {
  arr[i] = nodeList[i];
}

const arr = new Array(str.length);
for (let i = 0; i < str.length; i++) {
  arr[i] = str[charAt(i)];
}

ただし、Array コンストラクタは、スプレッド構文や Array.from よりも冗長な記述になります。

forEach ループを使用して、イテレータの各要素を配列に追加することもできます。

const arr = [];
nodeList.forEach((element) => {
  arr.push(element);
});

const arr = [];
str.forEach((char) => {
  arr.push(char);
});

ただし、forEach ループは、スプレッド構文や Array.from よりも処理速度が遅くなる可能性があります。

map 関数を使用して、イテレータの各要素を変換してから配列に追加することもできます。

const arr = nodeList.map((element) => element);
const arr = str.map((char) => char);

ただし、map 関数は、要素変換処理が必要な場合にのみ有効です。

Array.from の代替方法はいくつかありますが、それぞれにメリットとデメリットがあります。状況に応じて最適な方法を選択する必要があります。

一般的には、以下の条件を考慮すると良いでしょう。

  • ブラウザの互換性
  • コードの簡潔性
  • 処理速度



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

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



JavaScript Date.setUTCSeconds() の詳細解説

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


協定世界時 (UTC)

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


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

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


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

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



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

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


JavaScript エラー: 無効な for-in 初期化子 - エラー解決のヒント

初期化子の型for-in ループの初期化子は、オブジェクトである必要があります。オブジェクトリテラル、変数、プロパティへの参照など、オブジェクトを返す式を記述する必要があります。例:初期化子の値初期化子が null または undefined の場合、エラーが発生します。


エラー処理マスターへの道! AggregateError.aggregateError とその他の方法を使いこなす

AggregateError. aggregateErrorは、複数のErrorオブジェクトを受け取り、それらを1つのAggregateErrorオブジェクトにまとめる静的メソッドです。AggregateError. aggregateErrorの使い方


JavaScript AggregateError.errors プロパティの徹底解説

概要AggregateError は、複数のエラーを1つのエラーオブジェクトにまとめるための JavaScript の組み込みオブジェクトです。AggregateError. errors プロパティは、そのエラーオブジェクトに含まれる個々のエラーの配列です。


JavaScript の Errors: Cant use nullish coalescing unparenthesized の詳細解説

しかし、この演算子を使用する際に、**"Cant use nullish coalescing unparenthesized"**というエラーが発生する場合があります。これは、nullish coalescing演算子の優先順位が他の演算子よりも低いことが原因です。