Funktioniert dies, um zu testen, ob ein Wert an Position "Index" vorhanden ist oder nicht, oder gibt es einen besseren Weg:
if(arrayName[index]==""){
// do stuff
}
javascript
arrays
Ankur
quelle
quelle
Antworten:
Konzeptionell enthalten Arrays in JavaScript
array.length
Elemente, beginnend mitarray[0]
bisarray[array.length - 1]
. Ein Array-Element mit Indexi
wird als Teil des Arrays definiert, wenni
es zwischen0
undarray.length - 1
einschließlich liegt. Wenn ich nicht in diesem Bereich bin, ist es nicht im Array.Konzeptionell sind Arrays linear, beginnend mit Null und bis zum Maximum, ohne einen Mechanismus für "Lücken" innerhalb des Bereichs, in dem keine Einträge vorhanden sind. Um herauszufinden, ob an einem bestimmten Positionsindex ein Wert vorhanden ist (wobei der Index 0 oder eine positive Ganzzahl ist), verwenden Sie buchstäblich nur
Unter der Haube weisen JavaScript-Engines den Array-Speicherplatz mit ziemlicher Sicherheit nicht linear und zusammenhängend zu, da dies in einer dynamischen Sprache nicht viel Sinn macht und für bestimmten Code ineffizient wäre. Es handelt sich wahrscheinlich um Hash-Tabellen oder eine hybride Mischung von Strategien, und undefinierten Bereichen des Arrays wird wahrscheinlich kein eigener Speicher zugewiesen. In JavaScript möchte die Sprache jedoch Arrays von
array.length
n mit n Mitgliedern darstellen, und sie werden mit 0 bis n - 1 bezeichnet , und alles in diesem Bereich ist Teil des Arrays.Was Sie jedoch wahrscheinlich wollen, ist zu wissen, ob ein Wert in einem Array tatsächlich etwas Definiertes ist - das heißt, es ist nicht
undefined
. Vielleicht möchten Sie sogar wissen, ob es definiert ist und nichtnull
. Es ist möglich, Mitglieder zu einem Array hinzuzufügen, ohne jemals ihren Wert festzulegen. Wenn Sie beispielsweise Array-Werte durch Erhöhen derarray.length
Eigenschaft hinzufügen , werden alle neuen Werte angezeigtundefined
.Feststellen, ob ein bestimmter Wert etwas Sinnvolles ist oder definiert wurde. Das heißt nicht
undefined
odernull
:oder
Interessanterweise kann mein letztes Beispiel aufgrund der Vergleichsregeln von JavaScript auf Folgendes optimiert werden:
quelle
length
Eigenschaft. In diesem Fall sind die beiden späteren Beispiele besser geeignet.foo !== 'undefined' && foo !== null
justfoo != null
0
bis umfassenarray.length - 1
. Es werden jedoch nicht alle diese Werte als Werte definiert . Wenn Sie das Schlüsselwort delete für ein Array-Mitglied verwenden, wird dieses Element wieder auf undefiniert gesetzt. Wenn Sie ein Array durch Inkrementieren seines Parameters array.length erweitern, werden die neuen Werte als undefiniert gestartet. In der Realität optimieren Javascript-Implementierungen wahrscheinlich den Array-Speicher, und einige oder alle undefinierten Werte belegen möglicherweise keinen Speicher.new Array(1)[0] === undefined
aber der Wert ist leer.[undefined][0] === undefined
aber der Wert ist gesetzt; Das Array hat einen Wert. Die einzig perfekte Antwort ist die Verwendungin
oderhasOwnProperty()
-idx in array
oderarray.hasOwnProperty(idx)
- dieser Antwort: stackoverflow.com/a/39171620/3120446Können wir das nicht einfach so machen:
quelle
if(arrayName.length) {...
einen Unterschied machen?if(arrayName.length) {...
scheitert amnull
[undefined, undefined]
einem Array mit der Länge = 2.Nur zu verwenden
.length
ist nicht sicher und führt in einigen Browsern zu einem Fehler. Hier ist eine bessere Lösung:oder wir können verwenden:
quelle
quelle
quelle
x == null
wird immer nur für null oder undefiniert wahr sein, sonst nichts. Ebensox != null
gilt für alles, was weder null noch undefiniert ist. Wenn Sie nicht speziell nach undefiniert suchen müssen, lehnen Sie sich einfach an die implizite Konvertierungsgüte an.Kurzer und universeller Ansatz
Wenn Sie ein Array überprüfen möchten, ob es falsche Werte enthält (wie falsche, undefinierte, null oder leere Zeichenfolgen), können Sie einfach jede () Methode wie folgt verwenden :
Zum Beispiel:
Wenn Sie einen ersten Index für den falschen Wert benötigen, können Sie dies folgendermaßen tun:
Wenn Sie nur einen falschen Wert eines Arrays für einen bestimmten Index überprüfen müssen, können Sie dies folgendermaßen tun:
quelle
Wenn Sie mit 'Null' meinen -> Die Elemente sind null oder gleich '', in diesem Fall: Überprüfen Sie, ob das Array leer ist, nachdem Sie alle 'null'-Elemente gefiltert haben
Natürlich vorher die Clean- Methode hinzufügen:
quelle
Ich würde empfehlen, eine Funktion wie diese zu erstellen:
Man könnte es so nennen:
Wenn der Entwickler gezwungen wird, sich an die isEmptyEl-Schnittstelle zu halten, werden Eingabefehler wie undefinierte arrayName- oder indexVal-Variablen abgefangen.
(Es ist im Allgemeinen eine gute Praxis, beim Programmieren in Javascript defensiv zu programmieren.)
Sie würden einen solchen Fehler erhalten, wenn arrayName nicht definiert wäre:
Ähnliche Ergebnisse für ein undefiniertes indexVal.
Sie erhalten eine Fehlermeldung, wenn die Array- oder Indexwerte nicht vorhanden sind.
Für eine gültige Eingabe erhalten Sie nur dann ein true, wenn arrayName [indexVal] eine der folgenden Angaben ist:
quelle
Es kommt darauf an, was du mit "leer" meinst.
Wenn Sie versuchen, den Wert einer Eigenschaft für ein Objekt abzurufen, das keine Eigenschaft mit diesem Namen hat, erhalten Sie den Wert
undefined
.Das passiert mit spärlichen Arrays: Nicht alle Indizes zwischen
0
undarray.length-1
existieren.Sie können also überprüfen, ob
array[index] === undefined
.Die Eigenschaft kann
index
jedoch mit einemundefined
Wert vorhanden sein. Wenn Sie diesen Fall herausfiltern möchten, können Sie denin
Operator verwenden oderhasOwnProperty
, wie unter Wie überprüfe ich, ob ein Objekt eine Eigenschaft in JavaScript hat?Wenn Sie möchten, dass eine vorhandene Eigenschaft mit einem
undefined
odernull
-Wert nicht vorhanden ist, können Sie den losen Vergleicharray[index] == undefined
oder verwendenarray[index] == null
.Wenn Sie wissen , das Array nicht spärlich ist, könnte man vergleichen
index
mitarray.length
. Um jedoch sicher zu gehen, möchten Sie möglicherweise sicherstellen, dass es sichindex
tatsächlich um einen Array-Index handelt. Überprüfen Sie, ob der Eigenschaftsname ein Array-Index istquelle
OK, lassen Sie uns zuerst sehen, was passieren würde, wenn ein Array-Wert in JavaScript nicht vorhanden wäre. Wenn wir also ein Array wie das folgende haben:
und jetzt prüfen wir, ob 6 bei Index 5 vorhanden ist oder nicht:
und wir bekommen
undefined
...Das gibt uns also im Grunde die Antwort, den besten Weg , um zu überprüfen, ob undefiniert, also so etwas:
In diesem Fall ist es besser , dies NICHT zu tun:
Stellen Sie sich vor, wir haben dieses Array:
und wir tun:
Wie Sie sehen, ist sogar 0 vorhanden, es wird nicht erkannt, es gibt nur wenige andere Dinge, die das Gleiche bewirken und Ihre Anwendung fehlerhaft machen können. Seien Sie also vorsichtig, ich liste sie alle auf:
undefined
''
quelle
Ich möchte auf etwas hinweisen, das einige vermisst zu haben scheinen: Es ist nämlich möglich, eine "leere" Array-Position in der Mitte Ihres Arrays zu haben. Folgendes berücksichtigen:
Der natürliche Weg zu überprüfen wäre dann zu sehen, ob das Array-Mitglied undefiniert ist. Ich bin mir nicht sicher, ob es andere Wege gibt
quelle
Versuchen Sie dies, wenn Array [Index] null ist
quelle
Mit Lodash können Sie Folgendes tun:
if(_.has(req,'documents'))
ist zu überprüfen, ob unser Anforderungsobjekt eine Eigenschaft mit dem Namen hatdocuments
und ob es diese Requisite hat, das nächste ist zu überprüfen, obif (req.documents.length)
es kein leeres Array ist, damit die anderen Dinge wieforEach
fortgesetzt werden können.quelle
So überprüfen Sie, ob es noch nie definiert oder gelöscht wurde:
Funktioniert auch mit assoziativen Arrays und Arrays, bei denen Sie einen Index gelöscht haben
Um zu überprüfen, ob es nie definiert wurde, wurde gelöscht ODER ist ein null oder logischer leerer Wert (NaN, leere Zeichenfolge, false):
quelle
Ich bin auf dieses Problem mit Laravel-Datentabellen gestoßen. Ich habe einen JSON-Wert gespeichert, der
properties
in einem Aktivitätsprotokoll aufgerufen wurde, und wollte eine Schaltfläche anzeigen, die darauf basiert, ob dieser Wert leer ist oder nicht.Nun, datatables interpretierte dies als Array, wenn es leer war, und als Objekt, wenn es nicht war. Daher funktionierte die folgende Lösung für mich:
Ein Objekt hat keine Längeneigenschaft.
quelle
Ich denke, diese Entscheidung ist für Leute geeignet, die die deklarative funktionale Programmierung der imperativen OOP oder der prozeduralen vorziehen. Wenn Ihre Frage lautet " Gibt es einige Werte im Inneren? (Ein wahrer oder ein falscher Wert)" , können Sie
.some
die darin enthaltenen Werte mithilfe der Methode validieren.function isEmpty(arr) { ... }
.[].length
Ergebnis0
davon ist in einigen Fällen gefährlich.[].length > 0
Sprichwort "Ist seine Länge größer als Null?"Fortgeschrittene Beispiele:
quelle
Sie können die Loadsh-Bibliothek verwenden, um dies effizienter zu erledigen, z.
Wenn Sie ein Array mit dem Namen "Haustiere" haben, zum Beispiel:
So überprüfen Sie alle Array-Werte auf null oder undefinierte Werte:
Weitere Beispiele finden Sie unter http://underscorejs.org/.
quelle
fn(){}
ist ein Syntaxfehler, und es ist überhaupt nicht klar, wie dies hilft, zu überprüfen, ob ein Array-Element an einem bestimmten Index vorhanden ist oder nicht.