8

我从第一眼就知道这听起来像是重复的问题,但我不认为它是......

我收到一个 JSON 数组,如下所示:

var test1 = [] ;

或者

var test2 = [{},{},{}] ;  //This is empty

我没有问题找出是否test1为空。

jQuery.isEmptyObject(test1)

我的问题是test2......请注意,在某些情况下,test2 可能会返回如下内容:

var test2 = [{"a":1},{},{}] ;  //All these are not empty
var test2 = [{},{"a":1},{}] ;  //All these are not empty
var test2 = [{},{},{"a":1}] ;  //All these are not empty

上述场景不应算作空。我试过使用.length,但它没有帮助,因为长度总是 3...有什么想法吗?

干杯。

4

8 回答 8

7
function isArrayEmpty(array) {
    return array.filter(function(el) {
        return !jQuery.isEmptyObject(el);
    }).length === 0;
}

jsFiddle 演示

通过你所有的测试。

一个纯 JavaScript 解决方案是替换!jQuery.isEmptyObject(el)Object.keys(el).length !== 0

编辑:使用Array.prototype.every

function isArrayEmpty(array) {
    return array.every(function(el) {
        return jQuery.isEmptyObject(el);
    });
}
于 2013-08-23T06:26:53.513 回答
3

对于那些在家玩的人,非 jQuery 解决方案:

var test2 = [{a: 1},{},{}] ;  //This is empty

function isEmpty(val) {
    var len = val.length,
        i;

    if (len > 0) {
        for (i = 0; i < len; ++i) {
            if (!emptyObject(val[i])) {
                return false;
            }
        }
    }
    return true;
}

function emptyObject(o) {
    for (var key in o) {
        if (o.hasOwnProperty(key)) {
            return false;
        }
    }
    return true;
}

console.log(isEmpty(test2));
于 2013-08-23T06:39:34.260 回答
2

没有 JQuery:使用Array.filter1Object.keys2

function JSONEmpty(obj){
    return !obj.length || 
           !obj.filter(function(a){return Object.keys(a).length;}).length;
}
// usage
JSONEmpty([{"a":1},{},{}]);  //=> false
JSONEmpty([{},{"a":1},{}]);  //=> false
JSONEmpty([{},{},{"a":1}]);  //=> false
JSONEmpty([]);               //=> true
JSONEmpty([{},{},{}]);       //=> true

update 2018 现在所有现代浏览器都支持箭头功能,所以像himel-nag-rana规定的那样,你也可以使用:

const JSONEmpty = obj => !obj.length || !obj.filter(a => Object.keys(a).length).length;

1 更多信息
2 更多信息 (链接包含旧版浏览器的垫片)

于 2013-08-23T06:38:24.807 回答
1

我遇到了同样的问题,我使用了这个没有 jQuery 的解决方案:

function isEmpty(x) {
   for(var i in x) {
       return false;
   }
   return true;
}
于 2015-05-15T21:18:26.853 回答
0

很简单...

if(jQuery.isEmptyObject(test2[0]) && jQuery.isEmptyObject(test2[1]) && jQuery.isEmptyObject(test2[2])))
    // do something
于 2013-08-23T06:38:08.927 回答
0

也许您可以尝试使用类似的功能

function isEmptyObject (test) {
    for (var i in test) {
        if (!jQuery.isEmptyObject(test[i])
            return false;
    }
    return true;
}
于 2013-08-23T06:38:29.130 回答
0

这是我的看法:将数组变成一个集合并检查大小。

var myArray = [1,2,3];
var mySet = new Set(myArray);
console.log(mySet.size === 0);
于 2018-02-28T10:06:15.817 回答
-1

通过循环数组中的每个值进行检查并返回错误

for(i=0;js_array[i]!=null;i++)
{
  if(js_array[i]=="")
  { 
    alert("Empty");
  }
}
于 2013-08-23T06:34:10.883 回答