我有一个多维对象。根据其内容(空或非空),我想执行不同的功能 所以我试图检查它是否为空:
arr = [
[],
[],
[]
];
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var size = Object.size(arr);
if (size > 0) {
alert("NOT empty!")
} else {
alert("empty...")
}
在我的例子中它显示NOT empty!
,虽然它是空的(好吧,有点。有几个空对象)。
那么如何确定它是否由空对象组成?
答案 0 :(得分:2)
如果您认为数组为空,只要它们只包含空插槽或数组为空,请使用递归函数:
function isEmpty(array) {
return Array.isArray(array) && (array.length == 0 || array.every(isEmpty));
}
// Examples:
console.log(isEmpty([[], [[]]])); // true
console.log(isEmpty([,,])); // true
console.log(isEmpty([undefined])); // false
console.log(isEmpty([null])); // false
console.log(isEmpty([''])); // false
console.log(isEmpty([0])); // false
console.log(isEmpty([{}])); // false
console.log(isEmpty({})); // false
答案 1 :(得分:1)
您可以检查数组的长度
var arr = [
[],
[],
[]
];
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj[key].length != 0) size++;
}
return size;
};
var size = Object.size(arr);
if (size > 0) alert("NOT empty!")
else alert("empty...")
小提琴example
答案 2 :(得分:1)
some
就是您所需要的一切
var hasValues = arr.some( function (a) { return a.length });
或者您可以使用every
var isEmpty = arr.every( function (a) { return !a.length });
答案 3 :(得分:0)
按照@ÖzgürErsil的回答,但适用于对象和数组:
let onlyEmpties = arg => {
let hasNoEntries = item => {
if (Object.prototype.toString.call(item) === "[object Array]") {
return item.length === 0;
} else {
return Object.keys(item).length === 0;
}
};
let isEmpty = hasNoEntries(arg);
return isEmpty ||
(arg.every ?
arg.every(hasNoEntries) :
Object.keys(arg).every(hasNoEntries)
);
};
答案 4 :(得分:0)
尝试以下方法。它给出了结果中有多少元素在数组中不为空。尝试下面的plunker链接。
arr = [
[],
[],
[]
];
var i, len=0;
for(i=0; i<arr.length; i++){
//console.log(arr[i].length);
if(arr[i].length!=0){
len++;
}
}
console.log("Array have "+ len +" Element");
答案 5 :(得分:0)
您可以展平数组
var arr = [ [], [], [] ];
var flattenedArray = arr.flat(1);
console.log(flattenedArray.length)