Überprüfen Sie, ob das Array leer oder null ist

Lesezeit: 4 Minuten

Benutzer-Avatar
Eingang

Ich würde gerne wissen, wie man überprüft, ob ein Array in jQuery leer oder null ist. Ich habe es versucht array.length === 0 aber es hat nicht funktioniert. Es hat auch keinen Fehler ausgelöst.

Dies ist der Code:

var album_text = new Array();

$("input[name="album_text[]"]").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}

  • Genauso wie in „normalem JavaScript“: stackoverflow.com/questions/2672380/…

    – Julien Schmidt

    25. August 2011 um 23:08 Uhr

  • @Julien, ich habe alle in diesem Thread aufgeführten Lösungen ausprobiert, bevor ich diesen Thread gestartet habe. Keiner von ihnen funktionierte irgendwie.

    – Eingabe

    25. August 2011 um 23:10 Uhr


  • Können wir etwas mehr Code für den Kontext bekommen? Umgebung von JavaScript, HTML? Sind Sie sicher, dass $("input[name='album_text[]']") gibt eigentlich Elemente zurück?

    – Jon Adams

    25. August 2011 um 23:33 Uhr

  • @JulienSchmidt: Die Frage, auf die Sie verlinkt haben, betrifft die Überprüfung, ob ein Array vorhanden ist Wert leer ist, nicht das gesamte Array.

    – Dan Dascalescu

    20. Januar 2017 um 20:57 Uhr

Benutzer-Avatar
jfriend00

Solange Ihr Selektor tatsächlich funktioniert, sehe ich nichts Falsches an Ihrem Code, der die Länge des Arrays überprüft. Das sollte tun, was du willst. Es gibt viele Möglichkeiten, Ihren Code zu bereinigen, damit er einfacher und besser lesbar ist. Hier ist eine bereinigte Version mit Notizen darüber, was ich bereinigt habe.

var album_text = [];

$("input[name="album_text[]"]").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Einige Notizen darüber, was Sie getan haben und was ich geändert habe.

  1. $(this) ist immer ein gültiges jQuery-Objekt, daher gibt es keinen Grund, dies jemals zu überprüfen if ($(this)). Es enthält möglicherweise keine DOM-Objekte, aber Sie können dies mit überprüfen $(this).length wenn Sie müssen, aber das ist hier nicht notwendig, weil die .each() Die Schleife würde nicht ausgeführt, wenn es keine Elemente gäbe $(this) in deinem .each() Schleife wird immer etwas sein.
  2. Es ist ineffizient, $(this) mehrmals in derselben Funktion zu verwenden. Es ist viel besser, es einmal in eine lokale Variable zu bekommen und es dann von dieser lokalen Variablen aus zu verwenden.
  3. Es wird empfohlen, Arrays mit zu initialisieren [] statt new Array().
  4. if (value) wenn erwartet wird, dass der Wert eine Zeichenfolge ist, schützen beide vor value == null, value == undefined und value == "" also musst du das nicht machen if (value && (value != "")). Sie können einfach Folgendes tun: if (value) um alle drei leeren Bedingungen zu überprüfen.
  5. if (album_text.length === 0) wird Ihnen sagen, ob das Array leer ist, solange es ein gültiges, initialisiertes Array ist (was hier der Fall ist).

Was versuchst du mit diesem Selektor zu tun? $("input[name="album_text[]"]")?

  • @MaciekSemik – siehe stackoverflow.com/questions/359494/…. Ich verwende immer strikte Gleichheit (===), es sei denn, ich möchte ausdrücklich eine Typkonvertierung zulassen. Es ist eine gute Angewohnheit, sich darauf einzulassen.

    – jfriend00

    13. April 2014 um 18:21 Uhr


Benutzer-Avatar
Mayank Raipure

Benutzer JQuery ist EmptyObject, um zu prüfen, ob das Array Elemente enthält oder nicht.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true

  • Viel zuverlässiger als die Prüfung der Länge, insbesondere wenn Ihre Variable auch ein Objekt sein kann (bei Objekten funktioniert die Länge nicht, um zu prüfen, ob sie leer ist).

    – gierig

    20. November 2014 um 2:43 Uhr


  • Das ist meiner Meinung nach die passendere Antwort.

    – Earl3s

    31. März 2015 um 17:49 Uhr

  • isEmptyObject kehrt immer zurück false wenn Array.prototype erweitert wird, z Array.prototype.someFunction = function () {}; – auch wenn das Array leer ist. Beachten Sie, dass einige Frameworks (z. B. Ember.js) den Array-Prototyp standardmäßig erweitern.

    – Jessenko

    11. Mai 2015 um 18:04 Uhr


  • Sei vorsichtig mit isEmptyObject!Für jQuery 1.8.3 jQuery.isEmptyObject([]) kehrt zurück falseaber für jQuery 1.11.3 kehrt es zurück true. Eigentlich, jQuery-Dokumentation sagt Das Argument sollte immer ein einfaches JavaScript-Objekt sein, da andere Objekttypen (DOM-Elemente, primitive Zeichenfolgen/Zahlen, Host-Objekte) möglicherweise keine konsistenten Ergebnisse in allen Browsern liefern. Tut mir leid, ich habe die Antwort von @rhinoxi nicht gesehen.

    – Dmitri Werschinin

    16. November 2016 um 9:00 Uhr


Ich denke, es ist gefährlich, $.isEmptyObject von jquery zu verwenden, um zu überprüfen, ob das Array leer ist, wie @jesenko erwähnt hat. Ich bin gerade auf dieses Problem gestoßen.

In dem isEmptyObject doces erwähnt:

Das Argument sollte immer ein einfaches JavaScript-Objekt sein

anhand derer du es bestimmen kannst $.isPlainObject. Die Rückkehr von $.isPlainObject([]) ist falsch.

Sie sollten nachsehen '' (leerer String), bevor Sie in Ihr Array pushen. Ihr Array enthält Elemente, die leere Zeichenfolgen sind. Dann deine album_text.length === 0 wird gut funktionieren.

/*
  Basic Checking with undefined array for Jquery Array
*/
if (typeof myArray !== 'undefined' && myArray.length > 0) {
    console.log('myArray is not empty.');
}else{
    console.log('myArray is empty.');
}

1311160cookie-checkÜberprüfen Sie, ob das Array leer oder null ist

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

Privacy policy