如何在JavaScript中检查嵌套对象中指定键的值是否为空
如何判断嵌套对象中所有子对象的指定键值是否为空?
需求很明确:给定一个包含options子对象的嵌套结构,当options下所有子对象的value键值均为空(空字符串或null)时返回true,否则返回false。
先看你给出的示例对象:
const obj = { options: { opt1: { value: '', state: false, }, opt2: { value: '', state: false, }, opt3: { value: '', state: false, }, } }
你的原实现存在两个关键问题:
- 遍历对象错误:你直接遍历的是外层
obj的键,只会拿到options这一个键,此时obj[key]就是options对象,它本身并没有value属性,判断逻辑完全偏离。 - 循环逻辑错误:循环内部第一次判断后就直接
return,不管后续的子对象。比如第一个子对象满足条件就直接返回true,不会检查剩下的子对象;如果第一个不满足就返回false,逻辑不完整。
重构后的实现方式
方式一:使用Object.values + every方法(简洁高效)
利用Object.values获取options下的所有子对象,再用every方法统一判断每个子对象的value是否为空:
const areAllValuesEmpty = (targetObj) => { // 提取options下的所有子对象数组 const optionItems = Object.values(targetObj.options); // 检查每个子对象的value是否为空(空字符串或null) return optionItems.every(item => item.value === '' || item.value === null); } // 测试 console.log(areAllValuesEmpty(obj)); // 输出 true
方式二:使用for...in遍历(兼容性更好)
如果你需要兼容不支持Object.values和every的旧环境,可以用for...in遍历options的子对象:
const areAllValuesEmpty = (targetObj) => { const options = targetObj.options; for (const key in options) { // 只遍历对象自身的属性,避免原型链干扰 if (options.hasOwnProperty(key)) { const currentItem = options[key]; // 只要有一个value不为空,直接返回false if (currentItem.value !== '' && currentItem.value !== null) { return false; } } } // 所有value都为空,返回true return true; } // 测试 console.log(areAllValuesEmpty(obj)); // 输出 true
这两种实现都能准确满足需求,第一种更简洁,第二种兼容性更强,可根据你的环境选择。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

