Array.from()
Die Methode Array.from()
ist eine vielseitige Methode, die in der Praxis häufig verwendet wird, um array-ähnliche oder iterierbare Objekte in echte Arrays umzuwandeln.
Diese Methode gehört zu Array-Klasse und ist eine statische Methode, was bedeutet, dass sie direkt auf der Array-Klasse aufgerufen wird, nicht auf Instanzen eines Arrays.
Die Methode Array.from()
erstellt ein neues Array, indem sie ein array-ähnliches oder iterierbares Objekt nimmt und dessen Elemente in ein echtes Array kopiert.
Syntax
Array.from(arrayLike, mapFn, thisArg);
arrayLike
Dies ist das array-ähnliche oder iterierbare Objekt, das in ein Array konvertiert werden soll. Beispiele hierfür sind NodeList
, arguments
-Objekte oder andere Objekte, die eine length Eigenschaft haben und indizierte Elemente enthalten.
mapFn
(Optional): Eine Funktion, die auf jedes Element des neuen Arrays angewendet wird. Diese Funktion verhält sich ähnlich wie die Callback-Funktion in Array.prototype.map()
.
thisArg
(Optional) Ein optionaler Wert, der als this
in der mapFn
verwendet wird.
Array-Like vs. Iterable
Um zu verstehen, warum Array.from()
so nützlich ist, muss man den Unterschied zwischen array-ähnlichen und iterierbaren Objekten verstehen.
Array-ähnliche Objekte
Diese Objekte haben eine length
Eigenschaft und indizierte Elemente, aber sie sind keine echten Arrays. Beispiele sind die arguments
-Objekte innerhalb einer Funktion und NodeList
-Objekte, die von DOM-Methoden wie document.querySelectorAll()
zurückgegeben werden.
function example() {
console.log(arguments);
}
example(1, 2, 3);
[Arguments] { '0': 1, '1': 2, '2': 3 }
Iterierbare Objekte
Diese Objekte implementieren das Symbol.iterator
Protokoll, was bedeutet, dass sie über eine Schleife iteriert werden könnne, wie z.B. Arrays, Strings, Maps, Sets und andere. Mithilfe von for-of
Schleife kann über sie iteriert werden.
let iterable = new Set([1, 2, 3]);
for (let value of iterable) {
console.log(value);
}
1
2
3
Verwendung von Array.from()
Umwandlung eines Array-ähnlichen Objekts in Array
Ein typisches Szenario ist die Konvertierung des arguments
Objekts in ein echtes Arrays. Da arguments ein array-ähnliches Objekt ist, kann es nicht direkt auf Methoden wie map()
oder forEach()
zugreifen.
function example() {
let args = Array.from(arguments);
console.log(args);
console.log(args.map(x => x * 2));
}
example(1, 2, 3);
[ 1, 2, 3 ]
[ 2, 4, 6 ]
Umwandlung einer NodeList in ein Array
Ein weiteres Beispiel ist die Umwandlung einer NodeList
, die von Methoden wie document.querySelectorAll()
zurückgegeben wird, in ein echtes Arrays, sodass man Array-Methoden darauf anwenden kann.
let nodeList = document.querySelectorAll("div");
let divArray = Array.from(nodeList);
divArray.forEach(div => {
console.log(div.textContent);
});
Anwendung einer Map-Funktion während der Umwandlung
Man kann Array.from()
auch verwenden, um während der Umwandlung eine Transformation auf jedes Element anzuwenden, ähnlich wie bei Array.prototype.map()
.
let array = Array.from([1, 2, 3], x => x * 2);
console.log(array);
[ 2, 4, 6 ]
Umwandlung eines Strings in ein Array
Strings sind iterierbar, was bedeutet, dass sie mit Array.from()
in Arrays von Zeichen umgewandelt werden können.
let str = "Hello";
let charArray = Array.from(str);
console.log(charArray);
[ 'H', 'e', 'l', 'l', 'o' ]