如何匹配Javascript中的空字典?


Answers:



19

您可以Object.prototype使用此isEmpty方法进行扩展,以检查对象是否没有自己的属性:

Object.prototype.isEmpty = function() {
    for (var prop in this) if (this.hasOwnProperty(prop)) return false;
    return true;
};

28
哇..我发现JavaScript缺少这种“基本”功能非常有趣
harijay 2011年

2
扩展Object.prototype可能会在以后迭代该对象时产生问题yuiblog.com/blog/2006/09/26/for-in-intrigue
Camilo Sanchez

1
这会干扰jquery
Rubber Duck

在react js中测试,但是输出Object.prototype.isEmpty: this= undefined,所以不起作用,如何解决这个问题?
crifan


10

由于没有属性,因此for循环不会有任何迭代。为了给您应得的信誉,我在这里找到了这个建议。

function isEmpty(ob){
   for(var i in ob){ return false;}
  return true;
}

isEmpty({a:1}) // false
isEmpty({}) // true

1
我将创建一个count(obj)函数,如果count等于0
则将为isEmpty。

5
您可能要obj.hasOwnProperty(i)在返回false之前进行检查。这将滤除通过原型链继承的属性。
Elian Ebbing

9

这就是jQuery所使用的,效果很好。尽管这确实需要jQuery脚本使用isEmptyObject

isEmptyObject: function( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False

如果不包括jQuery,则只需创建一个单独的纯javascript函数。

function isEmptyObject( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False

5

我距离JavaScript学者还很远,但是以下工作有效吗?

if (Object.getOwnPropertyNames(d).length == 0) {
   // object is empty
}

它的优点是可以作为一行纯函数调用。


很酷的解决方案!它实际上是唯一一个没有循环且没有调用第三方库的库
Antonio Ragagnin 15/12/27

1

您必须像下面这样检查它是否为'object'类型:

(typeof(d) === 'object')

然后实现一个简短的“大小”功能,以检查其是否为空,如此处所述


1
var SomeDictionary = {};
if(jQuery.isEmptyObject(SomeDictionary))
// Write some code for dictionary is empty condition
else
// Write some code for dictionary not empty condition

这很好。


1

如果不考虑性能,则此方法很容易记住:

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

显然,您不想在循环中对大型对象进行字符串化处理。


0

如果您在Node.js上尝试使用此代码段,则根据此处的代码

Object.defineProperty(Object.prototype, "isEmpty", {
    enumerable: false,
    value: function() {
            for (var prop in this) if (this.hasOwnProperty(prop)) return false;
            return true;
        }
    }
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.