是否有 Javascript/Lodash 函数来检查对象是否缺少任何属性?

Is there a Javascript/Lodash function to check if an object is missing ANY properties?

提问人:Laura Drill 提问时间:8/15/2023 更新时间:8/15/2023 访问量:45

问:

我想检查一个 javascript 对象,看看它是否缺少任何属性,而无需单独检查每个属性。

我可以使用“hasownproperty”或执行 if/else 语句来检查每个语句是否为 null/undefined,我想要一种更短的检查对象的方法。

JavaScript 对象 属性 Lodash

评论

0赞 mplungjan 8/15/2023
请访问帮助中心,参观一下,看看什么以及如何。做一些研究 - 搜索 SO 寻找答案。如果您遇到困难,请发布一个最小的可重复尝试示例,并使用 [<>] 代码片段编辑器记录输入预期输出
0赞 Dave Newton 8/15/2023
您必须单独检查每个属性,因为您想知道每个属性是否都在那里。您是否在问如何使用属性名称集合和/或针对给定形状进行验证(可选使用约束)
1赞 VLAZ 8/15/2023
所以,应该说属性不见了。但是,呢 - 它应该说根本不存在吗?如果是这样,您如何确定哪些属性应该存在?{ foo: 1, bar: null }bar{ foo: 2 }bar

答:

0赞 mplungjan 8/15/2023 #1

也许是这个?

const hasMissing = obj => {
  const vals = Object.values(obj);
  return vals.filter(val => val !== null && val !== undefined).length !== vals.length
};  
const obj =  { "a":null, "b":"there", "c":0, "d":undefined }
console.log(obj);

console.log(JSON.stringify(obj)); // so we cannot use that

console.log("Missing?",hasMissing(obj))

0赞 Alexander Nenashev 8/15/2023 #2

对对象值使用(使用 ) 获取它们(如果 ANY 属性的值为 或,这将返回):Array::some()Object.values()truenullundefined

const obj =  { a: null, b: 'there', c: 0, d: undefined };

console.log("Missing?", Object.values(obj).some(v => v === undefined || v === null));

如果您想要尽可能快的速度,请编写自己的函数:

const obj =  { a: null, b: 'there', c: 0, d: undefined };

function hasNullProperties(obj){
  for(const k in obj){
    if(obj[k] === undefined || obj[k] === null){
      return true;
    }
  }
  return false;
}

console.log("Missing?", hasNullProperties(obj));

还有一个基准:

enter image description here

<script benchmark data-count="10000000">

const obj =  { a: null, b: 'there', c: 0, d: undefined };

// @benchmark Array::some()

Object.values(obj).some(v => v === undefined || v === null);

// @benchmark custom func
function hasNullProperties(obj){
  for(const k in obj){
    if(obj[k] === undefined || obj[k] === null){
      return true;
    }
  }
  return false;
}

// @run
hasNullProperties(obj);

</script>
<script src="https://cdn.jsdelivr.net/gh/silentmantra/benchmark/loader.js"></script>