webentwicklung-frage-antwort-db.com.de

Wie kann ich überprüfen, ob eine JSON in NodeJS leer ist?

Ich habe eine Funktion, die prüft, ob eine Anfrage Abfragen hat oder nicht, und verschiedene andere Aktionen ausführt. Derzeit habe ich if(query) noch etwas anderes. Es scheint jedoch so, als würde ich, wenn keine Abfragedaten vorhanden sind, ein {}-JSON-Objekt erhalten. Daher muss ich if(query) durch if(query.isEmpty()) oder etwas Ähnliches ersetzen. Kann jemand erklären, wie ich dies in NodeJS tun könnte? Verfügt das V8-JSON-Objekt über eine solche Funktionalität?

33
thisissami

Sie können eine dieser Funktionen verwenden:

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

Verwendungsbeispiel:

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

Sie können dies verwenden:

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

oder dieses:

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

Sie können dies auch verwenden:

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

  return true;
}

Wenn Sie Unterstrich oder jQuery verwenden, können Sie deren isEmpty- oder isEmptyObject-Aufrufe verwenden.

25
ali haider
Object.keys(myObj).length === 0;

Da nur überprüft werden muss, ob Object leer ist, empfiehlt es sich, direkt eine native Methode Object.keys (myObj) .length aufzurufen, die das Array von Schlüsseln durch internes Durchlaufen mit for..in loop.As Object.hasOwnProperty zurückgibt Ergebnis basierend auf der Eigenschaft, die in einem Objekt vorhanden ist, das selbst mit for..in durchläuft und die Zeitkomplexität O (N2) hat.

Auf der anderen Seite funktioniert das Aufrufen einer UDF, die selbst über zwei oder mehr Implementierungen verfügt, gut für kleine Objekte, sperrt jedoch den Code, was erhebliche Auswirkungen auf die Gesamtperformance hat, wenn die Objektgröße groß ist, sofern in der Ereignisschleife nichts anderes wartet.

3
Shubham Sharma

Wenn Sie mit Object.keys kompatibel sind und der Knoten über Kompatibilität verfügt, sollten Sie dies unbedingt verwenden. 

Wenn Sie jedoch keine Kompatibilität haben und aus irgendeinem Grund die Verwendung einer Schleifenfunktion nicht in Frage kommt - wie ich, habe ich die folgende Lösung verwendet: 

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

Betrachten Sie diese Lösung nur als "letzte Möglichkeit", wenn dies erforderlich ist. 

Siehe in den Kommentaren "Es gibt viele Wege, auf denen diese Lösung nicht ideal ist". 

Ich hatte ein letztes Resort-Szenario und es hat perfekt funktioniert. 

2
guy mograbi

Meine Lösung:

let isEmpty = (val) => {
    let typeOfVal = typeof val;
    switch(typeOfVal){
        case 'object':
            return (val.length == 0) || !Object.keys(val).length;
            break;
        case 'string':
            let str = val.trim();
            return str == '' || str == undefined;
            break;
        case 'number':
            return val == '';
            break;
        default:
            return val == '' || val == undefined;
    }
};
console.log(isEmpty([1,2,4,5])); // false
console.log(isEmpty({id: 1, name: "Trung",age: 29})); // false
console.log(isEmpty('TrunvNV')); // false
console.log(isEmpty(8)); // false
console.log(isEmpty('')); // true
console.log(isEmpty('   ')); // true
console.log(isEmpty([])); // true
console.log(isEmpty({})); // true
0
Trung Nguyên