如何检查一个对象中的所有属性是否为空值

16

我有一个对象,有时它是空的,就像这样 {} ,其他时候它会有一些被设置为 null 的属性。

{
  property1: null,
  property2: null
}

我该如何确定此对象中的所有属性是否均为 null?如果它们都是null,则返回 false。

目前我正在使用 lodash 检查第一种情况,即对象为空。但我还需要处理第二种情况。

if (isEmpty(this.report.device)) {
  return false;
}
return true;
7个回答

34
你可以使用 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);

文档:Object.values(), every()


如果对象是嵌套的呢? - Nikhil Nanjappa

7

使用.some()而不是.every()的方法:

function isEmpty (obj) {
    return !Object.values(obj).some(element => element !== null);
}

这个函数(命名为isEmpty以匹配问题中给出的名称)应该在任何obj属性不是null时返回false,否则返回true


4
您可以使用Object.keys()方法,它将返回该对象中的所有键作为数组。这使得您可以执行Object.keys(this.report.device).filter(key => !this.report.device[key] === null),这将返回非null键的数量,如果此值为0,则您已经得到了答案。
实质上,依靠null属性并不是一个好的方法,最好将这些属性设置为undefined或仅从API返回一个平坦的对象。
希望这有所帮助。

1
这非常简单,可以用一行代码完成!
function IsAllPropertiesNull(obj) {
 return Object.values(obj).every(v=>v == null);
}

a = {'a': null, 'b':null};
var isAllNull = IsAllPropertiesNull(a) 
// isAllNull = true

说明 - 获取对象的所有值 - 迭代它们并检查是否为null

祝你好运!


0

对于Es2015

if (Object.keys(obj).map(e => obj[e]).every(a => a.length === 0)) {
  console.log('all are empty');
}

0

使用Object.entriesArray.every

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");
} 


0

为了检查对象是否具有所有键的空值,一种更简洁的方法可能是。

const set = new Set(Object.values(obj));
const hasOnlyNullValues = set.size === 1 && set.has(null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接