检查JSON数组是否为空

时间:2013-08-23 06:20:26

标签: javascript jquery

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

我收到一个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 ...任何想法?

干杯。

8 个答案:

答案 0 :(得分:7)

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

jsFiddle Demo

通过所有测试。

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

修改:使用 Array.prototype.every

function isArrayEmpty(array) {
    return array.every(function(el) {
        return jQuery.isEmptyObject(el);
    });
}

答案 1 :(得分:2)

对于那些在家玩的人来说,非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));

答案 2 :(得分:1)

没有JQuery:使用Array.filter 1 Object.keys 2 :< / p>

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
所有现代浏览器现在都支持

更新2018 Arrow functions,因此如himel-nag-rana规定的那样,您也可以使用:

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

1 More info
2 More info(链接包含旧浏览器的填充程序)

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

很简单......

if(jQuery.isEmptyObject(test2[0]) && jQuery.isEmptyObject(test2[1]) && jQuery.isEmptyObject(test2[2])))
    // do something

答案 5 :(得分:0)

也许你可以尝试使用像

这样的功能
function isEmptyObject (test) {
    for (var i in test) {
        if (!jQuery.isEmptyObject(test[i])
            return false;
    }
    return true;
}

答案 6 :(得分:0)

这是我的看法:将数组转换为一组并检查大小。

var myArray = [1,2,3];
var mySet = new Set(myArray);
console.log(mySet.size === 0);

答案 7 :(得分:-1)

通过循环数组中的每个值并返回错误来检查 尝试

for(i=0;js_array[i]!=null;i++)
{
  if(js_array[i]=="")
  { 
    alert("Empty");
  }
}