Heim  >  Artikel  >  Web-Frontend  >  Fünf super nützliche Verwendungsmöglichkeiten von Array.from() (ausführliche Erklärung)

Fünf super nützliche Verwendungsmöglichkeiten von Array.from() (ausführliche Erklärung)

青灯夜游
青灯夜游nach vorne
2019-11-29 17:57:012223Durchsuche

Fünf super nützliche Verwendungsmöglichkeiten von Array.from() (ausführliche Erklärung)

Jede Programmiersprache verfügt über Funktionalitäten, die über die grundlegende Verwendung hinausgehen, und sie profitiert von einem erfolgreichen Design und den Versuchen, eine Vielzahl von Problemen zu lösen.

In JavaScript gibt es eine solche Funktion: Array.from: Ermöglicht nützliche Konvertierungen für JavaScript-Sammlungen (z. B. Arrays, arrayähnliche Objekte oder iterierbare Objekte wie Zeichenfolgen, Karten, Mengen usw.).

【Verwandte Kursempfehlung: JavaScript-Video-Tutorial

In diesem Artikel werde ich 5 nützliche und interessante Array.from()Anwendungsfälle beschreiben.

1. Einführung

Bevor wir beginnen, erinnern wir uns an die Rolle von Array.from(). Syntax:

Array.from(arrayLike[, mapFunction[, thisArg]])
  • arrayLike: Erforderlicher Parameter, das Pseudo-Array-Objekt oder iterierbare Objekt, das Sie in ein Array konvertieren möchten.

  • mapFunction: Optionaler Parameter, mapFunction(item, index){...} ist die Funktion, die für jedes Element in der Sammlung aufgerufen wird. Der zurückgegebene Wert wird in die neue Sammlung eingefügt.

  • thisArg: Optionaler Parameter, dieses Objekt beim Ausführen der Callback-Funktion mapFunction. Dieser Parameter wird selten verwendet.

Multiplizieren wir zum Beispiel jedes Element des Klassenarrays mit 2:

const someNumbers = { '0': 10, '1': 15, length: 2 };
Array.from(someNumbers, value => value * 2); // => [20, 30]

2 Konvertieren Sie das Klassenarray in ein Array

Array.from()Erste Verwendung: Array-ähnliche Objekte in Arrays umwandeln.

Normalerweise werden Sie auf Array-ähnliche Objekte stoßen: das Schlüsselwort arguments in einer Funktion oder eine DOM-Sammlung.

Im folgenden Beispiel summieren wir die Argumente einer Funktion:

function sumArguments() {
    return Array.from(arguments).reduce((sum, num) => sum + num);
}
sumArguments(1, 2, 3); // => 6

Array.from(arguments) Wandeln Sie das Array-ähnliche Objekt arguments in ein Array um und verwenden Sie dann die reduce-Methode des Arrays Summe.

Darüber hinaus kann der erste Parameter von Array.from() ein beliebiges iterierbares Objekt sein:

Array.from('Hey');                   // => ['H', 'e', 'y']
Array.from(new Set(['one', 'two'])); // => ['one', 'two']

const map = new Map();
map.set('one', 1)
map.set('two', 2);
Array.from(map); // => [['one', 1], ['two', 2]]

Klonen eines Arrays

Es gibt viele Möglichkeiten, Arrays in JavaScript zu klonen. Wie Sie sich vorstellen können, erleichtert Array.from() das Erstellen flacher Kopien von Arrays.

const numbers = [3, 6, 9];
const numbersCopy = Array.from(numbers);

numbers === numbersCopy; // => false

Array.from(numbers) erstellt eine flache Kopie des numbers-Arrays, und das Ergebnis von numbers === numbersCopy ist false, was bedeutet, dass numbers und numbersCopy zwar dieselben Elemente haben, dies aber der Fall ist anderes Array-Objekt.

Ist es möglich, mit Array.from() einen Klon eines Arrays zu erstellen, einschließlich aller verschachtelten Arrays? Fordern Sie sich selbst heraus!

function recursiveClone(val) {
    return Array.isArray(val) ? Array.from(val, recursiveClone) : val;
}

const numbers = [[0, 1, 2], ['one', 'two', 'three']];
const numbersClone = recursiveClone(numbers);

numbersClone; // => [[0, 1, 2], ['one', 'two', 'three']]
numbers[0] === numbersClone[0] // => false

recursiveClone() kann eine tiefe Kopie eines Arrays erstellen, indem es beurteilt, ob das item des Arrays ein Array ist. Rufen Sie weiterhin recursiveClone() auf, um eine tiefe Kopie von zu erhalten das Array.

Können Sie eine kürzere tiefe Kopie eines Arrays schreiben als mit einer Array.from() rekursiven Kopie? Wenn Sie können, schreiben Sie bitte in den Kommentarbereich unten.

4. Füllen Sie das Array mit Werten

Wenn Sie das Array mit denselben Werten initialisieren müssen, dann würde Array.from() dies tun sei eine gute Wahl.

Definieren wir eine Funktion, die ein Array erstellt, das mit denselben Standardwerten gefüllt ist:

const length = 3;
const init   = 0;
const result = Array.from({ length }, () => init);

result; // => [0, 0, 0]

result ist ein neues Array, seine Länge beträgt 3 und jedes Element des Arrays ist 0. Rufen Sie die Methode Array.from() auf und übergeben Sie ein Array-ähnliches Objekt { length } und eine Funktion mapFunction, die den initialisierten Wert zurückgibt.

Es gibt jedoch eine Alternative array.fill(), die die gleiche Funktionalität erreicht.

const length = 3;
const init   = 0;
const result = Array(length).fill(init);

fillArray2(0, 3); // => [0, 0, 0]

fill() füllt das Array korrekt mit Anfangswerten.

4.1 Füllen des Arrays mit Objekten

Wenn beim Initialisieren jedes Elements des Arrays ein neues Objekt sein soll, ist Array.from() eine bessere Lösung. Lösung:

const length = 3;
const resultA = Array.from({ length }, () => ({}));
const resultB = Array(length).fill({});

resultA; // => [{}, {}, {}]
resultB; // => [{}, {}, {}]

resultA[0] === resultA[1]; // => false
resultB[0] === resultB[1]; // => true

Das von Array.from zurückgegebene resultA wird mit einer anderen leeren Objektinstanz initialisiert. Dies liegt daran, dass mapFunction, also hier () => ({}), bei jedem Aufruf ein neues Objekt zurückgibt.

Anschließend wird das von der fill()-Methode erstellte resultB mit derselben leeren Objektinstanz initialisiert. Leere Elemente werden nicht übersprungen.

4.2 Wie wäre es mit der Verwendung von array.map? Kann

mit der Methode array.map() umgesetzt werden? Versuchen wir es:

const length = 3;
const init   = 0;
const result = Array(length).map(() => init);

result; // => [undefined, undefined, undefined]

map() Die Methode scheint abnormal zu sein. Das erstellte Array ist nicht das erwartete [0, 0, 0], sondern ein Array mit 3 leeren Elementen.

Das liegt daran, dass Array(length) ein Array mit 3 leeren Elementen erstellt (auch als Sparse-Array bezeichnet), die map()-Methode die leeren Elemente jedoch überspringt.

5. Nummernkreis generieren

你可以使用 Array.from() 生成值范围。例如,下面的 range 函数生成一个数组,从0开始到 end - 1

function range(end) {
    return Array.from({ length: end }, (_, index) => index);
}
range(4); // => [0, 1, 2, 3]

range() 函数中,Array.from() 提供了类似数组的 {length:end} ,以及一个简单地返回当前索引的 map 函数 。这样你就可以生成值范围。

6.数组去重

由于 Array.from() 的入参是可迭代对象,因而我们可以利用其与 Set 结合来实现快速从数组中删除重复项。

function unique(array) {
  return Array.from(new Set(array));
}
unique([1, 1, 2, 3, 3]); // => [1, 2, 3]

首先,new Set(array) 创建了一个包含数组的集合,Set 集合会删除重复项。

因为 Set 集合是可迭代的,所以可以使用 Array.from() 将其转换为一个新的数组。

这样,我们就实现了数组去重。

7.结论

Array.from() 方法接受类数组对象以及可迭代对象,它可以接受一个 map 函数,并且,这个 map 函数不会跳过值为 undefined 的数值项。这些特性给 Array.from() 提供了很多可能。

如上所述,你可以轻松的将类数组对象转换为数组,克隆一个数组,使用初始化填充数组,生成一个范围,实现数组去重。

实际上,Array.from() 是非常好的设计,灵活的配置,允许很多集合转换。

英文原文地址:https://dmitripavlutin.com/javascript-array-from-applications/

本文来自 js教程 栏目,欢迎学习!

Das obige ist der detaillierte Inhalt vonFünf super nützliche Verwendungsmöglichkeiten von Array.from() (ausführliche Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:dmitripavlutin.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen