2012-07-14 15 views
29

Mam funkcję, która sprawdza, czy żądanie ma żadnych kwerend, i wykonuje różne działania na podstawie tego. Obecnie mam if(query) zrobić coś innego. Wydaje się jednak, że gdy nie ma danych zapytań, otrzymuję obiekt JSON {}. Jako takie, muszę zastąpić if(query) z if(query.isEmpty()) lub coś w tym rodzaju. Czy ktoś może wyjaśnić, jak mogę to zrobić w NodeJS? Czy obiekt JSON V8 ma jakąkolwiek funkcjonalność tego rodzaju?Jak mogę sprawdzić, czy JSON jest pusty w NodeJS?

+0

nie "if (0 MilkyWayJoe

+1

naaa, query.length == undefined. długość jest standardowa w obiekcie Array, a nie w Object JSON. – thisissami

Odpowiedz

59

Można użyć jednej z tych funkcji:

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

Przykład użycia:

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

ładny ... drugi dobrze działa w węźle ... nie wypróbował pierwszego chociaż – Nav

16

Można to wykorzystać:

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

lub to:

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

Można również użyć tego:

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

    return true; 
} 

przypadku korzystania underscore lub jQuery, można użyć ich isEmpty lub isEmptyObject połączeń.

3

późno w grze, ale używam innego sposobu, który bardziej lubię, nawet jeśli nie jest to "właściwe" rozwiązanie.

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

wiem, że to podejście może dostać złych opinii, bo jestem przy założeniu, że reprezentacja ciąg pustego obiektu jest {} (a co, jeśli to było { }) - ale uważam, że łatwiej w ten sposób bez funkcji i wydaje działa dobrze dla mnie.

+1

Istnieje wiele powodów, dla których nie jest to świetne rozwiązanie, w tym wydajność i różnorodność sposobów, w jakie obiekty mogą być usztywniane , na przykład, stringify "Błąd" z właściwościami. –

+0

@DaveNewton,, Zgadzam się, że to nie jest świetne rozwiązanie. Oświadczam, że w mojej odpowiedzi. Nie zgadzam się z przykładem błędu, ponieważ 'Object.keys (obj) .length === 0' również zwróci pustą, więc w tym scenariuszu to rozwiązanie jest nadal poprawne. –

Powiązane problemy