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 September 2016.
Die statische Methode TypedArray.from()
erstellt ein neues Typed Array aus einem array-ähnlichen oder iterierbaren Objekt. Diese Methode ist nahezu identisch mit Array.from()
.
Probieren Sie es aus
Syntax
TypedArray.from(arrayLike, mapFn)
TypedArray.from(arrayLike, mapFn, thisArg)
Dabei ist TypedArray
eines der folgenden:
Parameter
arrayLike
-
Ein iterierbares oder array-ähnliches Objekt, das in ein Typed Array umgewandelt werden soll.
mapFn
Optional-
Eine Funktion, die auf jedes Element des Typed Arrays angewendet wird. Wenn angegeben, wird jeder Wert, der in das Array aufgenommen werden soll, zuerst durch diese Funktion geleitet, und der Rückgabewert von
mapFn
wird anstelle des Originals dem Typed Array hinzugefügt. Die Funktion wird mit den folgenden Argumenten aufgerufen: thisArg
Optional-
Wert, der als
this
verwendet wird, wennmapFn
ausgeführt wird.
Rückgabewert
Eine neue TypedArray
-Instanz.
Beschreibung
Siehe Array.from()
für weitere Details.
Es gibt einige subtile Unterschiede zwischen Array.from()
und TypedArray.from()
(Hinweis: der unten erwähnte this
-Wert bezieht sich auf den this
-Wert, mit dem TypedArray.from()
aufgerufen wurde, nicht auf das thisArg
-Argument, das verwendet wird, um mapFn
aufzurufen):
- Wenn der
this
-Wert vonTypedArray.from()
kein Konstruktor ist, wirftTypedArray.from()
einenTypeError
, währendArray.from()
standardmäßig ein neuesArray
erstellt. - Das durch
this
konstruierte Objekt muss eineTypedArray
-Instanz sein, währendArray.from()
seinenthis
-Wert zu jedem Objekt konstruieren lassen kann. - Wenn der
source
-Parameter ein Iterator ist, sammeltTypedArray.from()
zuerst alle Werte aus dem Iterator, erstellt dann eine Instanz vonthis
unter Verwendung der Anzahl und setzt schließlich die Werte in der Instanz.Array.from()
setzt jeden Wert, während er ihn vom Iterator erhält, und setzt dann am Ende seinelength
. TypedArray.from()
verwendet[[Set]]
, währendArray.from()
[[DefineOwnProperty]]
verwendet. Daher ruft es bei der Arbeit mitProxy
-Objektenhandler.set()
auf, um neue Elemente zu erstellen, anstatthandler.defineProperty()
.- Wenn
Array.from()
ein array-ähnliches Objekt erhält, das kein Iterator ist, werden Lücken respektiert.TypedArray.from()
stellt sicher, dass das Ergebnis dicht ist.
Beispiele
Von einem iterierbaren Objekt (Set)
const s = new Set([1, 2, 3]);
Uint8Array.from(s);
// Uint8Array [ 1, 2, 3 ]
Von einem String
Int16Array.from("123");
// Int16Array [ 1, 2, 3 ]
Nutzung mit Arrow-Funktion und map
Verwendung einer Arrow-Funktion als Map-Funktion zur Manipulation der Elemente
Float32Array.from([1, 2, 3], (x) => x + x);
// Float32Array [ 2, 4, 6 ]
Erzeugen einer Zahlenfolge
Uint8Array.from({ length: 5 }, (v, k) => k);
// Uint8Array [ 0, 1, 2, 3, 4 ]
Aufruf von from() auf Nicht-TypedArray Konstruktoren
Der this
-Wert von from()
muss ein Konstruktor sein, der eine TypedArray
-Instanz 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
Specification |
---|
ECMAScript Language Specification # sec-%typedarray%.from |
Browser-Kompatibilität
BCD tables only load in the browser