2013-08-23 23 views
7

Ich weiß aus den ersten Blick klingt es wie doppelte Frage, aber ich glaube nicht, es ist ...Überprüfen Sie, ob ein JSON-Array leer ist

Ich erhalte ein JSON-Array zurück:

var test1 = [] ; 

oder

var test2 = [{},{},{}] ; //This is empty 

ich habe kein Problem, herauszufinden, ob test1 leer ist.

jQuery.isEmptyObject(test1) 

Mein Problem mit dem test2 ist ... Bitte beachten Sie, dass in einigen Fällen die test2 könnte so etwas wie zurückgeben:

var test2 = [{"a":1},{},{}] ; //All these are not empty 
var test2 = [{},{"a":1},{}] ; //All these are not empty 
var test2 = [{},{},{"a":1}] ; //All these are not empty 

Die obigen Szenarien sollten nicht als empty.I gezählt werden‘ habe versucht, .length zu verwenden, aber es hilft nicht, da die Länge immer 3 ist ... Irgendwelche Ideen?

Prost.

+0

Wollen Sie damit sagen, dass es nur wahr zurückgeben sollte, wenn das Array leer ist oder das Array enthält nur Objekte ohne Schlüssel? –

+0

Warum nicht einfach diese if-Anweisung verwenden: 'test2 [0] .length === 0 && test [1] .length === 0 && test [2] .length === 0' Ich weiß, es ist grob, aber was auch immer – Markasoftware

+1

' Länge' ist keine gültige Eigenschaft für ein Objekt. –

Antwort

7
function isArrayEmpty(array) { 
    return array.filter(function(el) { 
     return !jQuery.isEmptyObject(el); 
    }).length === 0; 
} 

jsFiddle Demo

Pässe alle Tests.

Eine reine JavaScript-Lösung wäre !jQuery.isEmptyObject(el) zu ersetzen mit Object.keys(el).length !== 0

Edit: Mit Array.prototype.every

function isArrayEmpty(array) { 
    return array.every(function(el) { 
     return jQuery.isEmptyObject(el); 
    }); 
} 
+0

Prost Maat, was war was benötigt :) – Thanos

-1

Kontrolle durch jeweils Werte in Array Looping und geben Fehler Versuchen

for(i=0;js_array[i]!=null;i++) 
{ 
    if(js_array[i]=="") 
    { 
    alert("Empty"); 
    } 
} 
+0

Dies wird immer false zurückgeben, da die Bedingung eine Zuordnung zu einem falschen Wert verwendet. –

+0

Sorry aktualisiert..was Bedingung –

0

Ziemlich einfach ...

if(jQuery.isEmptyObject(test2[0]) && jQuery.isEmptyObject(test2[1]) && jQuery.isEmptyObject(test2[2]))) 
    // do something 
+1

Was ist, wenn das Array 4 Elemente hat? –

+0

Ja, ich war faul, aber Sie könnten dies sehr einfach in einer Schleife implementieren. – Ch33f

1

Ohne JQuery: Array.filter und Object.keys mit:

function JSONEmpty(obj){ 
    return !obj.length || 
      !obj.filter(function(a){return Object.keys(a).length;}).length; 
} 
// usage 
JSONEmpty([{"a":1},{},{}]); //=> false 
JSONEmpty([{},{"a":1},{}]); //=> false 
JSONEmpty([{},{},{"a":1}]); //=> false 
JSONEmpty([]);    //=> true 
JSONEmpty([{},{},{}]);  //=> true 

Update 2018Arrow functions werden nun von allen modernen Browsern unterstützt, so wie himel-nag-rana festgelegt, Sie können auch verwenden:

const JSONEmpty = obj => !obj.length || !obj.filter(a => Object.keys(a).length).length; 

More info
More info (Links enthalten Unterlegscheiben für ältere Browser)

+0

Wahrscheinlich ist die Browserkompatibilität für 'Object.keys' und' Array.filter' bemerkenswert. –

+0

eine kürzere Version mit Pfeilfunktion '' '' isJSONArrayEmpty (obj) { return! Obj.length || ! Obj.filter (a => Objekt.schlüssel (a) .length) .length; } '' '' –

+1

@HimelNagRana ​​Ich bin ziemlich sicher, Pfeilfunktionen wurden nicht oder teilweise in den meisten Browsern im August 2013 implementiert – KooiInc

0

Vielleicht könnten Sie verwenden Sie die Funktion wie

function isEmptyObject (test) { 
    for (var i in test) { 
     if (!jQuery.isEmptyObject(test[i]) 
      return false; 
    } 
    return true; 
} 
2

Für diejenigen versuchen, spielen bei Zu Hause, eine nicht jQuery Lösung:

var test2 = [{a: 1},{},{}] ; //This is empty 

function isEmpty(val) { 
    var len = val.length, 
     i; 

    if (len > 0) { 
     for (i = 0; i < len; ++i) { 
      if (!emptyObject(val[i])) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

function emptyObject(o) { 
    for (var key in o) { 
     if (o.hasOwnProperty(key)) { 
      return false; 
     } 
    } 
    return true; 
} 

console.log(isEmpty(test2)); 
1

hatte ich das gleiche Problem, und ich komme mit dieser Lösung ohne jQuery:

function isEmpty(x) { 
    for(var i in x) { 
     return false; 
    } 
    return true; 
} 
0

Hier ist mein nehmen: das Array in einen Satz drehen und Größe überprüfen.

var myArray = [1,2,3]; 
var mySet = new Set(myArray); 
console.log(mySet.size === 0); 
Verwandte Themen