为此:
var lists:{
item1:{}
,item2:{}
,item3:{}
,item4:{}
}
由于它基本上是空的,所以我需要一个函数(可能但不一定是_lodash一个)来检查它并说它是空的。
类似
is_empty(lists) // >> true (because every property resolves to an empty object)
如何?
答案 0 :(得分:3)
您可以遍历对象的值并检查所有值是否为空:
var lists = {
item1:{},
item2:{},
item3:{},
item4:{}
}
//ES6:
function isEmpty(obj) {
return Object.keys(obj).every(k => !Object.keys(obj[k]).length)
}
console.log(isEmpty(lists));
// ES5
function isEmpty(obj) {
return Object.keys(obj).every(function(k) {
return !Object.keys(obj[k]).length}
)
}
console.log(isEmpty(lists));
答案 1 :(得分:2)
如果lists
始终是对象的对象,则可以使用Object.values
遍历所有值,并检查每个值(内部对象)是否没有键:
const isEmpty = outer => Object.values(outer).every(
inner => Object.keys(inner).length === 0
);
var lists = {
item1:{}
,item2:{}
,item3:{}
,item4:{}
}
var lists2 = {
item1:{}
,item2:{}
,item3:{}
,item4:{}
,item5:{ foo: 'bar' }
}
console.log(isEmpty(lists));
console.log(isEmpty(lists2));
答案 2 :(得分:0)
此解决方案可检查是否永久嵌套了对象。
注意:这会将空字符串''
和布尔值false
都视为空。如果您需要特殊的支撑,可以在下面的代码中进行一些调整。
const isDeeplyEmpty = item => {
if(typeof item === 'boolean') return !item;
else if(typeof item === 'number') return false;
else if(typeof item === 'object') {
return Object.keys(item).every(k => {
if(['object', 'boolean', 'number'].includes(typeof item[k])) {
return isDeeplyEmpty(item[k]);
}
return _.isEmpty(item[k]);
})
}
return !item;
};