2012-12-20 14 views
15

Ich habe ein Objekt wie folgt aus:Überprüfen Sie, ob Objekt leer ist mit JavaScript/jQuery

ricHistory = { 
    name1: [{ 
    test1: value1, 
    test2: value2, 
    test3: value3 
    }], 
    name2: [{ 
    test1: value1, 
    test2: value2, 
    test3: value3 
    }] 
}; 

Jetzt ich, wenn beispielsweise überprüfen möchten name2 ist leer mit Javascript/jQuery. Ich kenne die Methode hasOwnProperty. Es funktioniert für data.hasOwnProperty('name2') nur wenn der Name existiert oder nicht, aber ich muss prüfen, ob es leer ist.

+0

Ihre Frage stellt, wie Sie überprüfen, ob ein Objekt ist leer, aber der Körper Ihrer Frage fragt, wie wenn ein Array überprüfen leer . Bitte seien Sie spezifischer für zukünftige Leser. – Jared

+0

mögliches Duplikat von [Ist das Objekt leer?] (Http://stackoverflow.com/questions/4994201/is-object-empty) – sierrasdetandil

Antwort

6

Try this:

if (ricHistory.name2 && 
    ricHistory.name2 instanceof Array && 
    !ricHistory.name2.length) { 
    console.log('name2 is empty array'); 
} else { 
    console.log('name2 does not exists or is not an empty array.'); 
} 

Die Lösung über Sie wird zeigen, ob richHistory.name2 vorhanden ist, ist ein Array und es ist nicht leer.

+0

Warum nicht alle drei Schecks in eine, große, wenn? –

2

diese nützliche Funktion Versuchen:

function isEmpty(obj) { 
if(isSet(obj)) { 
    if (obj.length && obj.length > 0) { 
     return false; 
    } 

    for (var key in obj) { 
     if (hasOwnProperty.call(obj, key)) { 
      return false; 
     } 
    } 
} 
return true;  
}; 

function isSet(val) { 
if ((val != undefined) && (val != null)){ 
    return true; 
} 
return false; 
}; 
+0

Was ist isSet ?? –

+0

Entschuldigung!:) Es ist eine weitere hilfreiche Funktion: P – stamat

+0

Vielen Dank für die "isEmpty" -Funktion – terales

-2
if (ricHistory.name2 === undefined) { 
    //This is property has not been set (which is not really the same as empty though...) 
} 
56

Sie diese jQuery.isEmptyObject() von tun können

prüfen, um zu sehen, ob ein Objekt leer ist (enthält keine Eigenschaften).

jQuery.isEmptyObject(object) 

Beispiel:

jQuery.isEmptyObject({}) // true 
jQuery.isEmptyObject({ foo: "bar" }) // false 

from Jquery

0

Sie könnten isSet verkürzen, indem Sie stattdessen tun:

function isSet(val) { return ((val != undefined) && (val != null));} 

Ich finde es einfacher, nur die boolean der Anweisung zurückgeben statt übergeben und dann zurückkehren.

+0

Dies ist eigentlich ein Kommentar zu dieser Antwort http://stackoverflow.com/a/13973962/3810453 – Zanshin13

3

Eine andere Syntax von JQuery, bei der Sie nicht Prototype oder ähnliches verwenden und lieber $ anstelle von jQuery verwenden;

$.isEmptyObject(object) 
0

Ich gehe wie dies die ganze Zeit in meinem Code:

meinen Controller Angenommen gibt so etwas wie unten:

$return['divostar'] = $this->report->get_additional_divostar_report($data); 
$return['success'] = true; 
return response()->json($return); 

In JQuery, würde ich wie unten überprüfen:

if (jQuery.isEmptyObject(data.divostar)){ 
     html_result = "<p id='report'>No report yet</p>"; 
     $('#no_report_table').html(html_result).fadeIn('fast'); 
} 
0

Sie können diese wiederverwendbare Komponente object-empty auch verwenden, um festzustellen, ob ein obj Referenz ist leer.

Beispiele:

empty([]) // => true 
empty({}) // => true 
empty(1) // => false 
empty('') // => false 
empty('foo') // => true 

Wie es funktioniert:

function isEmpty(obj: any): boolean { 
    for (const n in obj) if (hasOwnProperty(obj, n) && obj[n]) return false; // eslint-disable-line 
    return true; 
};