配列風オブジェクトから簡単に配列を作成! 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初心者必見!Date.setUTCMillisecondsメソッドを徹底解説

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



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

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


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

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


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

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


協定世界時 (UTC)

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



Number 型を使いこなして、JavaScript プログラミングをレベルアップ!

整数と小数を統一的に扱える数値演算や比較演算が使える文字列やオブジェクトに変換できる浮動小数点数表現(IEEE 754 準拠)を使用するため、精度誤差が発生する可能性があるNumber 型の値は、以下の方法で生成できます。リテラル表記:例:10、3.14、-5


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

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


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

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


JavaScript RegExp.lastParen を使いこなす:複雑なパターンマッチングをマスター

概要RegExp オブジェクトの静的プロパティ最後に一致した部分文字列のうち、最も外側の括弧で囲まれた部分を取得別名: RegExp["+"]∗使用例:∗複雑なパターンマッチングの結果を処理∗抽出した部分文字列を再利用∗マッチング結果の検証∗∗詳細∗∗∗∗∗値∗∗:∗最後に一致した部分文字列のうち、最も外側の括弧で囲まれた部分∗一致がない場合:空文字列∗複数回のマッチング:最後のマッチング結果∗∗∗更新タイミング∗∗:∗RegExpオブジェクト(サブクラスではない)がマッチングに成功するたびに更新∗括弧で囲まれたキャプチャグループが存在する場合のみ更新∗∗∗アクセス方法∗∗:∗RegExp


EvalError.evalErrorの回避と安全なコード記述: JavaScriptエラー処理のベストプラクティス

EvalError. evalError が発生する主な理由は以下の通りです。eval() 関数が非推奨または無効化されている環境: 多くの現代的なブラウザでは、セキュリティ上の懸念から eval() 関数が無効化されています。このような環境で eval() 関数を実行しようとすると、EvalError