Der Autor des Materials, dessen Übersetzung wir heute veröffentlichen, sagt, dass er in den letzten Monaten bei der Überprüfung von Pull-Anfragen ständig auf dieselben vier Mängel gestoßen ist, die mit der irrationalen Verwendung von Array-Methoden in JavaScript verbunden sind. Um solche Codefehler zu reduzieren, die zuvor in seinen Programmen auftraten, schrieb er diesen Artikel.

Ersetzen von indexOf () durch include ()
"Wenn Sie nach etwas in einem Array suchen, verwenden Sie die 
indexOf() -Methode." Ich habe eine solche Empfehlung in einem der Kurse getroffen, als ich JavaScript studiert habe. Diese Empfehlung ist ganz normal, nichts Schlechtes kann darüber gesagt werden.
In MDN können Sie feststellen, dass die 
indexOf() -Methode den ersten Index zurückgibt, anhand dessen ein bestimmtes Element im Array gefunden werden kann. Dies bedeutet, dass die 
indexof() -Methode hervorragend 
indexof() ist, um Elemente in Arrays zu finden, wenn wir diesen Index im Programm verwenden 
indexof() .
Aber was ist, wenn wir nur herausfinden müssen, ob das Array ein bestimmtes Element enthält oder nicht? Das heißt, wir interessieren uns nicht für den Index dieses Elements, wenn es sich im Array befindet, sondern für die Tatsache, dass es vorhanden oder nicht vorhanden ist. Mit diesem Ansatz sind wir mit einem Befehl sehr vertraut, der 
true oder 
false zurückgibt. In solchen Fällen empfehle ich, nicht die 
indexOf() -Methode zu verwenden, sondern die 
indexOf() includes() -Methode, die einen booleschen Wert zurückgibt. Betrachten Sie ein Beispiel:
 'use strict'; const characters = [ 'ironman', 'black_widow', 'hulk', 'captain_america', 'hulk', 'thor', ]; console.log(characters.indexOf('hulk'));  
Verwenden Sie die find () -Methode anstelle der filter () -Methode
Die 
filter() -Methode ist ein sehr nützliches Werkzeug. Auf der Grundlage eines Arrays wird ein anderes Array erstellt, das die Elemente des ursprünglichen Arrays enthält, die der angegebenen Bedingung entsprechen. Wie aus dem Namen dieses Verfahrens ersichtlich ist, ist es zum Filtern von Arrays vorgesehen, bei denen üblicherweise Arrays erhalten werden, die kürzer als die ursprünglichen sind.
Was ist, wenn wir wissen, dass nach dem Filtern des Arrays nur ein Element übrig bleibt? Dies kann beispielsweise passieren, wenn Sie versuchen, Array-Elemente anhand einer eindeutigen Kennung zu filtern. In einer solchen Situation würde ich die Verwendung der 
filter() -Methode nicht empfehlen, da das Array, das sie bildet, nur ein Element enthält. Wenn wir an einem Array-Element mit einem eindeutigen Wert interessiert sind, arbeiten wir mit einem einzelnen Wert, und ein Array wird nicht benötigt, um einen solchen Wert darzustellen.
Wenn wir über die Leistung der 
filter() -Methode sprechen, stellt sich heraus, dass zum Erstellen einer Liste von Elementen, die der beim Aufruf angegebenen Bedingung entsprechen, das gesamte Array betrachtet werden muss. Stellen Sie sich außerdem vor, dass ein Array Hunderte von Elementen enthält, die eine bestimmte Bedingung erfüllen. Dies führt dazu, dass das resultierende Array ziemlich groß ist.
Um solche Situationen zu vermeiden, würde ich die Methode 
find() empfehlen. Beim Aufruf erhält es einen Rückruf, der die Bedingung beschreibt und der mit der 
filter() -Methode verwendeten sehr ähnlich ist. Die 
find() -Methode gibt jedoch nur das erste Element zurück, das der Bedingung entspricht. Gleichzeitig funktioniert diese Methode sofort nicht mehr, nachdem sie ein solches Element gefunden hat. Infolgedessen muss er nicht das gesamte Array durchsuchen.
 'use strict'; const characters = [ { id: 1, name: 'ironman' }, { id: 2, name: 'black_widow' }, { id: 3, name: 'captain_america' }, { id: 4, name: 'captain_america' }, ]; function getCharacter(name) { return character => character.name === name; } console.log(characters.filter(getCharacter('captain_america'))); // [ //   { id: 3, name: 'captain_america' }, //   { id: 4, name: 'captain_america' }, // ] console.log(characters.find(getCharacter('captain_america'))); // { id: 3, name: 'captain_america' } 
Ersetzen der find () -Methode durch die some () -Methode
Ich muss zugeben, das Versehen, über das wir jetzt sprechen werden, habe ich schon oft begangen. Dann rieten sie mir, mir 
MDN anzuschauen und herauszufinden, wie ich das, was ich irrational getan habe, verbessern kann. Kurz gesagt, dies ist sehr ähnlich zu dem, was wir uns gerade angesehen haben, als wir über die 
indexOf() und 
indexOf() includes() -Methoden gesprochen haben.
Im obigen Fall haben wir gesehen, dass die 
find() -Methode als Argument einen Rückruf akzeptiert und ein Array-Element zurückgibt. Kann die 
find() -Methode als die erfolgreichste Lösung bezeichnet werden, wenn wir herausfinden müssen, ob das Array einen bestimmten Wert enthält oder nicht? Möglicherweise nicht, da diese Methode den Wert eines Array-Elements und keinen Booleschen Wert zurückgibt.
In einer solchen Situation würde ich die Verwendung der 
some() -Methode empfehlen, die einen booleschen Wert zurückgibt.
 'use strict'; const characters = [ { id: 1, name: 'ironman', env: 'marvel' }, { id: 2, name: 'black_widow', env: 'marvel' }, { id: 3, name: 'wonder_woman', env: 'dc_comics' }, ]; function hasCharacterFrom(env) { return character => character.env === env; } console.log(characters.find(hasCharacterFrom('marvel')));  
Verwenden der Methode redu () anstelle einer Kombination der Methoden filter () und map ()
Es ist anzumerken, dass die Methode 
reduce() nicht als leicht verständlich eingestuft werden kann. Wenn jedoch das, was damit gemacht werden kann, in zwei Schritten unter Verwendung der in einer Kette kombinierten Methoden 
filter() und 
map() wird, scheint etwas in diesem Ansatz nicht zu stimmen.
Ich sage, dass Sie bei diesem Ansatz das Array zweimal betrachten müssen. Der erste Durchgang, der von der 
filter() -Methode ausgeführt wird, umfasst das Anzeigen des gesamten Arrays und das Erstellen eines neuen, gefilterten Arrays. Nach dem zweiten Durchgang, der von der 
map() -Methode ausgeführt wird, wird erneut ein neues Array erstellt, das die Ergebnisse der Transformation der Elemente des Arrays enthält, die nach dem Ausführen der 
filter() -Methode erhalten wurden. Um das fertige Array zu erreichen, werden daher zwei Methoden verwendet. Jede Methode hat ihren eigenen Rückruf, und während der Ausführung einer solchen Operation mit der 
filter() -Methode wird ein Array erstellt, mit dem wir nicht mehr arbeiten können.
In solchen Fällen würde ich die Verwendung der Methode 
reduce() empfehlen, um die Belastung des mit zwei Methoden erstellten Systems zu verringern und die Produktivität von Programmen zu steigern. Das Ergebnis wird das gleiche sein, aber der Code wird besser ausfallen. Mit dieser Methode können Sie die für uns interessanten Elemente filtern und zur Batterie hinzufügen. Die Batterie kann eine numerische Variable sein, die beispielsweise die Summe der Elemente des Arrays speichert. Sie kann ein Objekt, eine Zeichenfolge oder ein Array sein, in dem wir die benötigten Elemente akkumulieren können.
In unserem Fall würde ich, da es sich um die Verwendung der 
map() -Methode handelt, die Verwendung der 
reduce() -Methode mit einem Array als Akkumulator empfehlen. Im folgenden Beispiel filtern wir die Array-Elemente, die Objekte sind, nach dem Wert des 
env Felds und führen ihre Konvertierung durch.
 'use strict'; const characters = [ { name: 'ironman', env: 'marvel' }, { name: 'black_widow', env: 'marvel' }, { name: 'wonder_woman', env: 'dc_comics' }, ]; console.log( characters   .filter(character => character.env === 'marvel')   .map(character => Object.assign({}, character, { alsoSeenIn: ['Avengers'] })) ); // [ //   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] }, //   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] } // ] console.log( characters   .reduce((acc, character) => {     return character.env === 'marvel'       ? acc.concat(Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))       : acc;   }, []) ) // [ //   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] }, //   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] } // ] 
Zusammenfassung
In diesem Artikel haben wir einige Ansätze zur effektiven Verwendung von Array-Methoden zur Lösung verschiedener Probleme untersucht. Wir glauben, dass die Ideen, auf denen die Empfehlungen des Autors dieses Artikels basieren, dazu beitragen können, den JS-Code in anderen Situationen zu verbessern.
Liebe Leser! Haben Sie jemals Beispiele für eine Fehlallokation von JavaScript-Mechanismen gefunden?
