检查JSON数组是否为空

问题描述 投票:7回答: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 ...任何想法?

干杯。

javascript jquery
8个回答
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);
    });
}

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));

1
投票

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

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

1
投票

没有JQuery:使用Array.filter1和Object.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

更新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(链接包含旧版浏览器的填充程序)


0
投票

很简单......

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

0
投票

也许你可以尝试使用像

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

0
投票

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

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

-1
投票

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

for(i=0;js_array[i]!=null;i++)
{
  if(js_array[i]=="")
  { 
    alert("Empty");
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.