2012-07-14 112 views
29

Tengo una función que comprueba si una solicitud tiene alguna consulta o no, y hace diferentes acciones basadas en eso. Actualmente, tengo if(query) hago esto otra cosa. Sin embargo, parece que cuando no hay datos de consulta, termino con un objeto JSON {}. Como tal, necesito reemplazar if(query) con if(query.isEmpty()) o algo por el estilo. ¿Alguien puede explicar cómo podría hacer esto en NodeJS? ¿El objeto JSON V8 tiene alguna funcionalidad de este tipo?¿Cómo puedo verificar si un JSON está vacío en NodeJS?

+0

no 'if (0 MilkyWayJoe

+1

naaa, query.length == undefined. la longitud es estándar en un objeto de matriz, no en un objeto JSON. – thisissami

Respuesta

59

Puede utilizar cualquiera de estas funciones:

// 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; 
} 

Ejemplo de uso:

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 ... el segundo funciona bien en el nodo ... no intenté con el primero aunque – Nav

16

Se puede utilizar esta:

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

o esto:

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

También puede utilizar esto:

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

    return true; 
} 

Si se utiliza underscore o jQuery, puede utilizar sus isEmpty o isEmptyObject llamadas.

3

tarde en el juego, pero estoy usando otra manera que me gusta más, incluso si no es una solución "adecuada".

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

Sé que este enfoque podría tener malas críticas porque yo estoy asumiendo que la representación de cadena del objeto vacío es {} (y lo que si era { }) - pero me parece que es más fácil de esta manera sin una función y que parece funciona bien para mi

+1

Existen varias razones por las que esta no es una gran solución, incluido el rendimiento, y la variedad de formas en que los objetos pueden ser codificados , por ejemplo, stringify un 'Error' con propiedades. –

+0

@DaveNewton, acepto que esta no es una gran solución. Lo afirmo en mi respuesta. No estoy de acuerdo con el ejemplo de error dado que 'Object.keys (obj) .length === 0' también devolverá vacío, por lo que en este escenario, esta solución sigue siendo correcta. –

Cuestiones relacionadas