我从第一眼看就知道它听起来像重复的问题,但我认为不是......
我收到一个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;
}
通过所有测试。
纯JavaScript解决方案是用!jQuery.isEmptyObject(el)
替换Object.keys(el).length !== 0
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 Arrow functions现在所有现代浏览器都支持,所以像himel-nag-rana规定的那样,你也可以使用:
const JSONEmpty = obj => !obj.length || !obj.filter(a => Object.keys(a).length).length;
很简单......
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");
}
}