528 Stimmen

Ist das Objekt leer?

Wie kann man am schnellsten prüfen, ob ein Objekt leer ist oder nicht?

Gibt es einen schnelleren und besseren Weg als diesen?

function count_obj(obj){
    var i = 0;
    for(var key in obj){
        ++i;
    }

    return i;
}

6 Stimmen

Möchten Sie die Eigenschaften zählen (das ist es, was der Code tut) oder nur testen, ob das Objekt leer ist oder nicht (das ist in Ihrer Frage angegeben)?

2 Stimmen

Nur als Empfehlung von Bibliotheken, die dazu in der Lage sind is.js y lodash

0 Stimmen

Für derartige Dienstprogramme empfiehlt es sich, einige Bibliotheken zu verwenden. Sie könnten lodash verwenden und etwas wie _.isEmpty(_.keys(yourObject)) . Und ich glaube, Sie können jetzt diese beiden Methoden einzeln importieren, und nicht die gesamte Lodash-Bibliothek.

1voto

mgttt Punkte 171
funtion isEmpty(o,i)
{
    for(i in o)
    {
        return!1
    }
    return!0
}

0 Stimmen

Funktioniert in 99 % der Fälle.

2 Stimmen

En !0 y !1 sind hier eher verwirrend. Warum nicht einfach nur true y false ?

1voto

Alireza Punkte 92209

Stellen Sie sich vor, Sie haben die folgenden Objekte:

var obj1= {};
var obj2= {test: "test"};

Vergessen Sie nicht, können wir NICHT verwenden === Zeichen für die Prüfung eines Objekts Gleichheit, wie sie Vererbung, so dass, wenn Sie mit ECMA 5 und höhere Version von Javascript, die Antwort ist einfach, können Sie die Funktion unten:

function isEmpty(obj) {
   //check if it's an Obj first
   var isObj = obj !== null 
   && typeof obj === 'object' 
   && Object.prototype.toString.call(obj) === '[object Object]';

   if (isObj) {
       for (var o in obj) {
           if (obj.hasOwnProperty(o)) {
               return false;
               break;
           }
       }
       return true;
   } else {
       console.error("isEmpty function only accept an Object");
   }
}

so dass das Ergebnis wie folgt aussieht:

isEmpty(obj1); //this returns true
isEmpty(obj2); //this returns false
isEmpty([]); // log in console: isEmpty function only accept an Object

0voto

Möglicherweise können Sie diese Entscheidung nutzen:

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

0voto

Ich habe den Code von Sean Vieira an meine Bedürfnisse angepasst. null und undefined zählen nicht als Objekt, und Zahlen, boolesche Werte und leere Strings geben false zurück.

'use strict';

// Speed up calls to hasOwnProperty
var hasOwnProperty = Object.prototype.hasOwnProperty;

var isObjectEmpty = function(obj) {
    // null and undefined are not empty
    if (obj == null) return false;
    if(obj === false) return false;
    if(obj === true) return false;
    if(obj === "") return false;

    if(typeof obj === "number") {
        return false;
    }   

    // Assume if it has a length property with a non-zero value
    // that that property is correct.
    if (obj.length > 0)    return false;
    if (obj.length === 0)  return true;

    // Otherwise, does it have any properties of its own?
    // Note that this doesn't handle
    // toString and valueOf enumeration bugs in IE < 9
    for (var key in obj) {
        if (hasOwnProperty.call(obj, key)) return false;
    }

    return true;
};

exports.isObjectEmpty = isObjectEmpty;

0voto

Tengiz Punkte 1782
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isArray(a) {
    return Object.prototype.toString.call(a) === '[object Array]'
}
function isObject(a) {
    return Object.prototype.toString.call(a) === '[object Object]'
}
function isEmpty(a) {
    if (null == a || "" == a)return!0;
    if ("number" == typeof a || "string" == typeof a)return!1;
    var b = !0;
    if (isArray(a)) {
        if (!a.length)return!0;
        for (var c = 0; c < a.length; c++)isEmpty(a[c]) || (b = !1);
        return b
    }
    if (isObject(a)) {
        for (var d in a)hasOwnProperty.call(a, d) && (isEmpty(a[d]) || (b = !1));
        return b
    }
    return!0
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X