TypedArray.from()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
Die statische Methode TypedArray.from() erstellt ein neues typisiertes Array aus einem Array-ähnlichen oder iterierbaren Objekt. Diese Methode entspricht weitgehend Array.from().
Probieren Sie es aus
const uint16 = Int16Array.from("12345");
console.log(uint16);
// Expected output: Int16Array [1, 2, 3, 4, 5]
Syntax
TypedArray.from(arrayLike, mapFn)
TypedArray.from(arrayLike, mapFn, thisArg)
Dabei ist TypedArray eines der folgenden Objekte:
Parameter
arrayLike-
Ein iterierbares oder Array-ähnliches Objekt, das in ein typisiertes Array umgewandelt werden soll.
mapFnOptional-
Eine Funktion, die für jedes Element des typisierten Arrays aufgerufen wird. Falls angegeben, wird jeder Wert vor dem Hinzufügen zum Array an diese Funktion übergeben. Stattdessen wird der Rückgabewert von
mapFnzum typisierten Array hinzugefügt. Die Funktion wird mit den folgenden Argumenten aufgerufen: thisArgOptional-
Der Wert, der bei der Ausführung von
mapFnalsthisverwendet werden soll.
Rückgabewert
Eine neue Instanz von TypedArray.
Beschreibung
Weitere Einzelheiten finden Sie unter Array.from().
Zwischen Array.from() und TypedArray.from() gibt es einige feine Unterschiede (Hinweis: Der im Folgenden erwähnte this-Wert ist der Wert, mit dem TypedArray.from() aufgerufen wurde, nicht das Argument thisArg, das beim Aufruf von mapFn verwendet wird):
- Wenn der
this-Wert vonTypedArray.from()kein Konstruktor ist, löstTypedArray.from()einenTypeErroraus.Array.from()erstellt dagegen standardmäßig ein neuesArray. - Das durch
thiskonstruierte Objekt muss eine Instanz vonTypedArraysein. BeiArray.from()darf derthis-Wert dagegen ein beliebiges Objekt konstruieren. - Wenn der Parameter
sourceein Iterator ist, sammeltTypedArray.from()zunächst alle Werte aus dem Iterator, erstellt dann anhand ihrer Anzahl eine Instanz vonthisund setzt schließlich die Werte in dieser Instanz.Array.from()setzt jeden Wert, sobald er vom Iterator empfangen wird, und setzt am Ende die Eigenschaftlength. TypedArray.from()verwendet[[Set]], währendArray.from()[[DefineOwnProperty]]verwendet. BeiProxy-Objekten wird daherhandler.set()statthandler.defineProperty()aufgerufen, um neue Elemente zu erstellen.- Wenn
Array.from()ein Array-ähnliches Objekt erhält, das kein Iterator ist, bleiben Lücken erhalten.TypedArray.from()stellt dagegen sicher, dass das Ergebnis keine Lücken enthält.
Beispiele
>Aus einem iterierbaren Objekt (Set)
const s = new Set([1, 2, 3]);
Uint8Array.from(s);
// Uint8Array [ 1, 2, 3 ]
Aus einem String
Int16Array.from("123");
// Int16Array [ 1, 2, 3 ]
Verwendung mit einer Arrow Function und einer Mapping-Funktion
Eine Arrow Function als Mapping-Funktion verwenden, um die Elemente zu verändern
Float32Array.from([1, 2, 3], (x) => x + x);
// Float32Array [ 2, 4, 6 ]
Eine Zahlenfolge erzeugen
Uint8Array.from({ length: 5 }, (v, k) => k);
// Uint8Array [ 0, 1, 2, 3, 4 ]
from() auf Konstruktoren aufrufen, die keine TypedArray-Konstruktoren sind
Der this-Wert von from() muss ein Konstruktor sein, der eine Instanz von TypedArray zurückgibt.
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>
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 ]
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-%typedarray%.from> |