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
3Verwendung 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' ]