Wie überprüfe ich, ob ein Array leer ist oder existiert?
Lesezeit: 6 Minuten
Benutzer1564141
Wenn die Seite zum ersten Mal geladen wird, muss ich prüfen, ob ein Bild vorhanden ist image_array und lade das letzte Bild.
Andernfalls deaktiviere ich die Vorschauschaltflächen, mache den Benutzer darauf aufmerksam, dass er die Schaltfläche „Neues Bild“ drücken soll, und erstelle ein leeres Array, um die Bilder zu platzieren.
Das Problem ist, dass image_array in dem else feuert die ganze zeit. Wenn ein Array vorhanden ist, wird es einfach überschrieben, aber die Warnung funktioniert nicht.
if(image_array.length > 0)
$('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
$('#prev_image').attr('disabled', 'true');
$('#next_image').attr('disabled', 'true');
alert('Please get new image');
var image_array = [];
}
@Utkanos, wenn es var image_array = gibt [] – undefiniert if //var image_array = [] (kommentiert) – echtes Array.
– Benutzer1564141
31. Juli 2012 um 15:31 Uhr
array?.length – weithin unterstützt und wird bald ein natives Feature sein
– Anbu Agarwal
9. Juni 2020 um 14:33 Uhr
jbaby
if (typeof image_array !== 'undefined' && image_array.length > 0) {
// the array is defined and has at least one element
}
Ihr Problem kann aufgrund einer Mischung aus impliziten globalen Variablen und variablem Heben auftreten. Stellen Sie sicher, dass Sie verwenden var immer wenn eine Variable deklariert wird:
<?php echo "var image_array = ".json_encode($images);?>
// add var ^^^ here
Und stellen Sie dann sicher, dass Sie diese Variable später nie versehentlich erneut deklarieren:
else {
...
image_array = []; // no var here
}
Nö. Dies wird explodieren, wenn image_array null ist. Murphys Gesetz besagt, dass dies eines Tages der Fall sein wird.
– Marco Faustinelli
20. März 2015 um 6:32 Uhr
Ist nicht image_array.length genügend? (ohne Angabe >0)
– mfort
12. April 2015 um 12:56 Uhr
Neugierig: Können Sie einen Anwendungsfall finden, der mit der Antwort von @JamesDrinkard brechen würde?
– Zemer
24. August 2016 um 9:01 Uhr
if (image_array && image_array.length){ // array exists and has elements
– YeeHaw1234
4. November 2016 um 18:53 Uhr
Dies schlägt fehl let image_array = new Array(10);.
– Saket Kumar
12. November 2020 um 0:30 Uhr
Pooyan Khosravi
Um zu prüfen, ob ein Array leer ist oder nicht
Eine moderne Art, ES5+:
if (Array.isArray(array) && array.length) {
// array exists and is not empty
}
Javascript hat ein dynamisches Typsystem. Das bedeutet, dass wir nicht garantieren können, welchen Objekttyp eine Variable enthält. Es besteht die Möglichkeit, dass wir nicht mit einer Instanz von sprechen Array.
supposedToBeArray = new SomeObject();
typeof supposedToBeArray.length; // => "undefined"
array = new Array();
typeof array.length; // => "number"
Fall leeres Array
Da wir jetzt alle anderen Möglichkeiten getestet haben, sprechen wir von einer Instanz von Array. Um sicherzustellen, dass es nicht leer ist, fragen wir nach der Anzahl der Elemente, die es enthält, und stellen sicher, dass es mehr als null Elemente enthält.
Bitte beachten Sie, dass dies der Fall ist nicht ausreichend, um nur nachzuschauen (typeof array != "undefined" && array.length > 0) weil wenn array null ist, werden wir bekommen TypeError: Cannot read property 'length' of null.
– Pooyan Khosravi
9. Mai 2014 um 20:56 Uhr
Eventuell && mit || ändern
– Sahar Ch.
30. Mai 2014 um 13:42 Uhr
!(typeof array !== "undefined") || !(array.length > 0)? Habe es gerade probiert, habe den gleichen Fehler. Können Sie uns ein vollständiges Beispiel für die Verwendung geben? ||?
– Pooyan Khosravi
30. Mai 2014 um 16:12 Uhr
ich meinte (typeof array != "undefined" || array.length > 0)
– Sahar Ch.
30. Mai 2014 um 23:24 Uhr
Danke für die Klarstellung. (typeof array != "undefined" || array.length > 0) kehrt zurück true wenn array = null. !(typeof array != "undefined" || array.length > 0) kehrt zurück false wenn array = [1,2]. Tut mir leid, dass ich es nicht verstanden habe, aber @Elsa, kannst du ein funktionierendes Beispiel geben? Danke im Voraus.
– Pooyan Khosravi
2. Juni 2014 um 20:50 Uhr
Queequeg
Wie wäre es mit (ECMA 5.1):
if(Array.isArray(image_array) && image_array.length){
// array exists and is not empty
}
Betreff .. && image_array.length). IMHO, während Sie kann Verlassen Sie sich sicher auf die lose Typisierung von JS, um a zu konvertieren 0 Ganzzahl zu false und ein non-zero Ganzzahl zu true, halte ich es aus Gründen der zukünftigen Lesbarkeit für vorzuziehen, “zu sagen, was Sie meinen”. Ich würde es tun .. && image_array.length > 0).
– WerkzeugmacherSteve
12. Oktober 2019 um 12:17 Uhr
James Drinkard
Dies ist, was ich benutze. Die erste Bedingung deckt Wahrheit ab, die sowohl null als auch undefiniert hat. Die zweite Bedingung prüft auf ein leeres Array.
oder dank tsemers Kommentar habe ich eine zweite Version hinzugefügt
if(arrayName && arrayName.length)
Dann habe ich mit Scratchpad in Firefox einen Test für die zweite Bedingung gemacht:
var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;
console.log(array1);
console.log(array2);
console.log(array3);
console.log(array4);
if (array1 && array1.length) {
console.log("array1! has a value!");
}
if (array2 && array2.length) {
console.log("array2! has a value!");
}
if (array3 && array3.length) {
console.log("array3! has a value!");
}
if (array4 && array4.length) {
console.log("array4! has a value!");
}
was das auch beweist if(array2 && array2.length) und if(array2 && array2.length > 0) machen genau das gleiche
@ user1564141 schwer zu sagen, wo die Funktion relativ zu Ihrem eingestellten image_array deklariert wird. Möglicherweise haben Sie ein Hosting-Problem, daher müssen Sie diese Variable möglicherweise als var index_array = … deklarieren. Außerdem wird das Skript-Tag, in dem Sie index_array festlegen, geschlossen. Aus dem Screenshot geht das nicht hervor.
– Mike Brant
31. Juli 2012 um 15:35 Uhr
Im Else ist auch Alert, das nur ausgelöst wird, wenn das Array leer ist, aber das var image_array funktioniert jedes Mal … Ich kann nicht verstehen, warum?
– Benutzer1564141
31. Juli 2012 um 15:38 Uhr
@ user1564141 Es wäre hilfreich, wenn Sie Ihre Frage aktualisieren könnten, um die Quelle als Ausgabe anzuzeigen. Ich habe immer noch kein Gefühl dafür, wo sich Ihre if-else-Logik in der Quelle relativ zum Speicherort Ihrer index_array-Deklaration befindet.
– Mike Brant
31. Juli 2012 um 15:41 Uhr
14316000cookie-checkWie überprüfe ich, ob ein Array leer ist oder existiert?yes
Konsolenprotokoll
image_array
– was bekommst du?– Mitja
31. Juli 2012 um 15:23 Uhr
@Utkanos, wenn es var image_array = gibt [] – undefiniert if //var image_array = [] (kommentiert) – echtes Array.
– Benutzer1564141
31. Juli 2012 um 15:31 Uhr
array?.length – weithin unterstützt und wird bald ein natives Feature sein
– Anbu Agarwal
9. Juni 2020 um 14:33 Uhr