检查JSON数组是否为空

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

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

干杯。

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

jsFiddle演示

通过所有测试。

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

编辑:使用Array.prototype.every

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

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

我有同样的问题,我没有jQuery来解决这个问题:

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

没有JQuery:使用Array.filter 1Object.keys 2

 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现在所有现代浏览器都支持箭头function ,所以像himel-nag-rana规定的那样,你也可以使用:

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

1 更多信息
2 更多信息 (链接包含旧版浏览器的填充程序)

很简单……

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

也许你可以尝试使用像

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

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

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

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

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