TypedArray.from()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.
TypedArray.from() メソッドは、配列風オブジェクトや反復可能オブジェクトから新しい型付き配列を生成します。このメソッドは Array.from() とほぼ同じです。
試してみましょう
const uint16 = Int16Array.from("12345");
console.log(uint16);
// Expected output: Int16Array [1, 2, 3, 4, 5]
構文
js
TypedArray.from(arrayLike, mapFn)
TypedArray.from(arrayLike, mapFn, thisArg)
ここで TypedArray は次のいずれかです。
引数
arrayLike-
型付き配列に変換する反復可能または配列風オブジェクトです。
mapFn省略可-
型付き配列の各要素に対して呼び出す関数です。指定された場合、配列に追加するすべての値は最初にこの関数に渡され、代わりに
mapFnの返値が型付き配列に追加されます。この関数は以下の引数で呼び出されます。 thisArg省略可-
mapFnを実行するときにthisとして使う値です。
返値
新しい TypedArray インスタンスです。
解説
詳しくは Array.from() をご覧ください。
Array.from() と TypedArray.from() の間には微妙な違いがあります(メモ: 下記で言及する this 値は TypedArray.from() が呼び出された this 値であり、 mapFn を呼び出すために用いた thisArg 引数ではありません)。
TypedArray.from()に渡されたthisの値がコンストラクターではなかった場合、TypedArray.from()でTypeErrorが発生します。それに対してArray.from()が既定で新しいArrayを生成します。thisで構築されるオブジェクトはTypedArrayインスタンスでなければなりませんが、Array.from()はthisの値を任意のオブジェクトに構築することができます。- 引数
sourceがイテレーターの場合、TypedArray.from()は最初にイテレーターからすべての値を収集し、次にそのカウントを使用してthisのインスタンスを作成し、最後にそのインスタンスに値を設定します。Array.from()はイテレーターから値を受け取るとそれぞれの値を設定し、最後にlengthを設定します。 TypedArray.from()は[[Set]]を使用します。Array.from()は[[DefineOwnProperty]]を使用します。 従ってProxyオブジェクトを使っている場合は、新しい要素を追加するときにhandler.set()がhandler.defineProperty()の代わりに呼び出されます。Array.from()がイテレーターではない配列風オブジェクトを受け取ったときは、穴をそのまま残します。TypedArray.from()は必ず密配列 (dense array) を生成します。
例
>反復可能オブジェクトから (Set)
js
const s = new Set([1, 2, 3]);
Uint8Array.from(s);
// Uint8Array [ 1, 2, 3 ]
文字列から
js
Int16Array.from("123");
// Int16Array [ 1, 2, 3 ]
アロー関数と map の使用
アロー関数をマップ関数として使用して要素を操作します。
js
Float32Array.from([1, 2, 3], (x) => x + x);
// Float32Array [ 2, 4, 6 ]
数列を生成する
js
Uint8Array.from({ length: 5 }, (v, k) => k);
// Uint8Array [ 0, 1, 2, 3, 4 ]
TypedArray 以外のコンストラクターに対する from() の呼び出し
from() の this 値は TypedArray インスタンスを返すコンストラクターでなければなりません。
js
function NotArray(len) {
console.log("NotArray called with length", len);
}
Int8Array.from.call({}, []); // TypeError: #<Object> is not a constructor
Int8Array.from.call(NotArray, []);
// NotArray called with length 0
// TypeError: Method %TypedArray%.from called on incompatible receiver #<NotArray>
js
function NotArray2(len) {
console.log("NotArray2 called with length", len);
return new Uint8Array(len);
}
console.log(Int8Array.from.call(NotArray2, [1, 2, 3]));
// NotArray2 called with length 3
// Uint8Array(3) [ 1, 2, 3 ]
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-%typedarray%.from> |