检查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
1和Object.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"); } }