我从第一眼看就知道这听起来像是重复的问题,但我认为不是......
我收到一个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 ...任何想法?
干杯。
答案 0 :(得分:7)
function isArrayEmpty(array) {
return array.filter(function(el) {
return !jQuery.isEmptyObject(el);
}).length === 0;
}
通过所有测试。
纯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;
答案 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");
}
}