2012-07-14 14 views
29

Ho una funzione che verifica se una richiesta ha o meno richieste e fa diverse azioni basate su quella. Attualmente, ho if(query) fare qualcos'altro. Tuttavia, sembra che quando non ci sono dati di query, finisco con un oggetto JSON {}. Come tale, ho bisogno di sostituire if(query) con if(query.isEmpty()) o qualcosa del genere. Qualcuno può spiegare come potrei fare questo in NodeJS? L'oggetto V8 JSON ha qualche funzionalità di questo tipo?Come posso verificare se un JSON è vuoto in NodeJS?

+0

non 'if (0 MilkyWayJoe

+1

naaa, query.length == undefined. la lunghezza è standard in un oggetto array, non in un oggetto JSON. – thisissami

risposta

59

È possibile utilizzare una di queste funzioni:

// This should work in node.js and other ES5 compliant implementations. 
function isEmptyObject(obj) { 
    return !Object.keys(obj).length; 
} 

// This should work both there and elsewhere. 
function isEmptyObject(obj) { 
    for (var key in obj) { 
    if (Object.prototype.hasOwnProperty.call(obj, key)) { 
     return false; 
    } 
    } 
    return true; 
} 

Esempio di utilizzo:

if (isEmptyObject(query)) { 
    // There are no queries. 
} else { 
    // There is at least one query, 
    // or at least the query object is not empty. 
} 
+0

nice ... il secondo funziona bene nel nodo ... non ho provato il primo se – Nav

16

È possibile utilizzare questo:

var isEmpty = function(obj) { 
    return Object.keys(obj).length === 0; 
} 

o questo:

function isEmpty(obj) { 
    return !Object.keys(obj).length > 0; 
} 

È anche possibile utilizzare questo:

function isEmpty(obj) { 
    for(var prop in obj) { 
    if(obj.hasOwnProperty(prop)) 
     return false; 
    } 

    return true; 
} 

Se si utilizza underscore o jQuery, è possibile utilizzare i loro isEmpty o isEmptyObject chiamate.

3

in ritardo nel gioco, ma sto usando un altro modo che mi piace di più anche se non è una soluzione "corretta".

JSON.stringify(obj) === '{}' 

So che questo approccio potrebbe ottenere recensioni negative perché io parto dal presupposto che la rappresentazione di stringa di oggetto vuoto è {} (e che se era { }) - ma trovo più facile in questo modo, senza una funzione e sembra funziona bene per me

+1

Ci sono diversi motivi per cui questa non è una grande soluzione, comprese le prestazioni, e la varietà di modi in cui gli oggetti possono essere ad esempio, stringificare un 'Errore' con proprietà. –

+0

@DaveNewton,, sono d'accordo sul fatto che questa non è una grande soluzione. Lo dico nella mia risposta. Non sono d'accordo sull'esempio Error poiché 'Object.keys (obj) .length === 0' restituirebbe anche vuoto, quindi in questo scenario questa soluzione è ancora corretta. –

Problemi correlati