我有一个对象,有时像{}
一样是空的,有时它会将属性设置为null。
{
property1: null,
property2: null
}
如何判断此对象中的所有属性是否为空? 如果它们都为null,则返回false。
目前我正在使用lodash来检查对象只是{}
为空的第一种情况。但我还需要介绍第二种情况。
if (isEmpty(this.report.device)) {
return false;
}
return true;
答案 0 :(得分:6)
您可以使用Object.values
将对象转换为数组,并使用every
检查每个元素。使用!
来否定该值。
let report = {
property1: null,
property2: null,
}
let result = !Object.values(report).every(o => o === null);
console.log(result);

有些元素不是null
let report = {
property1: null,
property2: 1,
}
let result = !Object.values(report).every(o => o === null);
console.log(result);

答案 1 :(得分:2)
您可以使用Object.keys()
方法将该对象中的所有键作为数组返回。这使得Object.keys(this.report.device).filter(key => !this.report.device[key] === null)
成为可能,这将返回非空键的数量,如果这是0,那么你有答案。
本质上依赖null
属性并不是一个好方法,最好是制作这些属性undefined
或只是从API中返回一个平面对象。
希望这会有所帮助。
答案 2 :(得分:1)
function isEmpty (obj) {
return !Object.values(obj).some(element => element !== null);
}
如果任何isEmpty
属性不是false
,则此函数(名称为obj
以匹配问题中给出的名称)将返回null
,否则返回true
答案 3 :(得分:0)
let obj = {
property1: null,
property2: null,
};
function isEmpty(o) {
return Object.entries(o).every(([k,v]) => v === null);
}
if(isEmpty(obj)) {
console.log("Object is empty");
}

答案 4 :(得分:0)
这很简单,可以用一个衬垫完成!
function IsAllPropertiesNull(obj) {
return Object.values(obj).every(v=>v == null);
}
a = {'a': null, 'b':null};
var isAllNull = IsAllPropertiesNull(a)
// isAllNull = true
解释 - 获取对象的所有值 - 迭代它们并检查null
祝你好运!