如何判断嵌套对象与数组中的所有值是否均为null并返回布尔值
多层嵌套对象全null校验实现方案
核心逻辑
通过递归遍历所有层级的属性值,只要命中任意一个非null值就直接返回true,遍历完成后未找到非null值则返回false,同时兼容数组、嵌套对象、基础值三类数据结构的判断。
代码实现
function checkHasNonNull(input) { // 当前值为null直接返回无有效非null值 if (input === null) return false // 处理数组类型,遍历每一项递归校验 if (Array.isArray(input)) { for (const item of input) { if (checkHasNonNull(item)) return true } return false } // 处理普通对象类型,遍历所有属性值递归校验 if (typeof input === 'object') { for (const val of Object.values(input)) { if (checkHasNonNull(val)) return true } return false } // 非对象、非数组、非null的基础类型,属于非null值 return true }
调用示例
以你给出的全null测试对象为例:
// 测试用对象 const testObj = { employerCompanyName: null, companyBenefitsProviderName: null, companyRepresentative: null, website: null, logonID: null, password: null, benefitsDetails: [{ benefitsPackageType: null, benefitsCoverageDetails: [], policyNumber: null }], coverageDetails: [{ familyMemberCovered: null, currency: null, amount: null }], beneficiaryDetails: [{ beneficiary: null, allocation: null }], notes: null } console.log(checkHasNonNull(testObj)) // 输出 false testObj.employerCompanyName = "阿里巴巴" console.log(checkHasNonNull(testObj)) // 输出 true
拓展说明
如果你的业务场景中需要将0、''、false、undefined也等同于空值处理,只需要修改函数最后基础类型的判断逻辑即可,例如修改为:
// 拓展版,将空字符串、0、false、undefined也视为空 return !!input
内容的提问来源于stack exchange,提问作者Pozitivnuy
相关产品推荐
相关产品推荐

