Frage Suchen Sie nach einer leeren Karte


Ich habe ein interessantes Thema, von dem ich sicher bin, dass es leicht erklärt wird, aber die Erklärung entzieht sich mir.

Ein undefiniertes oder Null-Objekt in Javascript ist gleich falsch.

var x;
alert(!x); //returns true
alert(x==true); //returns false

Was ist mit einem leeren Array-Objekt? Ist das das Äquivalent von wahr oder falsch?

var x = [];
alert (x==true); //returns false
alert (!x); //returns false

Wenn es gleich wahr ist, wie überprüfe ich, ob es nicht leer ist? Ich hatte gehofft zu tun

if (!x) {
    //do stuff
}

Ich habe es versucht x.length, aber ich verwende dieses Objekt als Karte:

var x = [];
alert(x.length); //returns 0
x.prop = "hello"; 
alert(x.length); //still returns 0

Wie kann ich prüfen, ob meine Karte leer ist?


11
2017-08-21 14:49


Ursprung


Antworten:


Wenig verwirrt, da Sie Objekte und Arrays in Ihrer Frage zu vermischen scheinen. Hoffentlich hilft Ihnen das bei der Klärung.

Ein leeres Array wird als wahr ausgewertet:

!![] //true

Aber integer 0 wird zu false ausgewertet, also können Sie Folgendes tun:

!![].length //false

Damit:

if([].length) {
   //array has 1 element at least
} else {
  //array has 0 elements
}

Sie scheinen Arrays und Objekte jedoch verwirrt zu bekommen. In JavaScript haben wir Objekte:

var x = {};
x.foo = "bar";
x.baz = 2;

Und wir haben Arrays:

var x = [];
x.push("foo");
x.length //1

Sie können nicht tun, was Sie in Ihrem Opener tun:

var x = []; //x is an array
x.foo = "bar"; //can't do this on an array
x.length; // 0 

7
2017-08-21 14:52



Es ist nicht so einfach wie es aussieht, Sie müssen überprüfen, ob das Objekt mindestens eine Eigenschaft besitzt.

jQuery bietet isEmptyObject zu diesem Zweck:

function isEmptyObject( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

Beispielverwendung:

> var x = [];
> x.prop = "hello"; 
> isEmptyObject(x);
false

12
2017-08-21 14:52



wenn Sie JQuery verwenden

jQuery.isEmptyObject(obj)

Wenn nicht, können Sie Ihre eigenen implementieren

isEmptyObject = function(obj) {
for (key in obj) {
    if (obj.hasOwnProperty(key)) return false;
}
return true;
};

4
2017-12-10 12:27



Zuallererst verwenden Sie ein Array, keine Karte. Eine Map wäre eine Objektinstanz:

var x = {};
x.prop = "5";

Ihr Code ist gültig, da Arrays auch Objekte sind. Sie können prüfen, ob Ihr Objekt leer ist, wie beantwortet diese Frage.


2
2017-08-21 15:12



Wenn Sie ein richtiges JS verwenden Map<K, V> Object, Sie können einfach die Map-API verwenden Mozilla-Dokumente.

Speziell gibt es ein Map.prototype.size Eigentum, sowie Map.prototype.entries() Methode, von der ich glaube, dass sie ein Array zurückgibt [] von Schlüsseln. Wenn das so ist length 0 dann ist die Karte leer.


1
2017-07-08 20:00



* Wenn eine leere Liste wahr ist (if (array1)).

*x.prop fügt dem Array keine Elemente hinzu, sondern weist der Eigenschaft x des Arrays nur den Wert "hallo" zu, aber das Array ist immer noch leer. Also solltest du immer noch benutzen .length Um zu überprüfen, ist das Array leer.


0
2017-11-26 20:16