Wie überprüfe ich, ob ein Array leer ist oder existiert?

Lesezeit: 6 Minuten

Benutzeravatar von user1564141
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 = [];
}

UPDATE Vor dem Laden von HTML habe ich so etwas:

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>

  • 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

Benutzeravatar von jbabey
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

Benutzeravatar von Pooyan Khosravi
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
}

Ein Old-School-Weg:

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

Ein kompakter Weg:

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

Ein CoffeeScript-Weg:

if array?.length > 0

Wieso den?

Fall undefiniert

Undefinierte Variable ist eine Variable, der Sie noch nichts zugewiesen haben.

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

Fall Null

Im Allgemeinen ist null ein Zustand ohne Wert. Beispielsweise ist eine Variable null, wenn Sie einige Daten verpasst oder nicht abgerufen haben.

array = searchData();  // can't find anything
array == null;         // => true

Fall Kein Array

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.

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true

  • 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

Benutzeravatar von Queequeg
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

Benutzeravatar von James Drinkard
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.

if(arrayName && arrayName.length > 0){
    //do something.
}

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

optionale Verkettung

Da der optionale Verkettungsvorschlag Stufe 4 erreicht hat und breitere Unterstützung erhält, gibt es einen sehr eleganten Weg, dies zu tun

if(image_array?.length){

  // image_array is defined and has at least one element

}

Du solltest benutzen:

  if (image_array !== undefined && image_array.length > 0)

Wenn Sie testen möchten, ob die Image-Array-Variable definiert wurde, können Sie dies folgendermaßen tun

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}

  • Funktioniert nicht dl.dropbox.com/u/14396564/screens/…

    – Benutzer1564141

    31. Juli 2012 um 15:29 Uhr

  • @ 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

1431600cookie-checkWie überprüfe ich, ob ein Array leer ist oder existiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy