React中校验对象指定键是否存在有效值并返回布尔值的实现方法
实现方案
你要的需求完全可以用JS内置的Array.some()方法实现,它天生适配「只要有一个元素满足条件就返回true,全部不满足返回false」的逻辑,性能比reduce更优(匹配到第一个有效值就终止遍历)。
最简实现代码
function hasAddressData(obj: Record<string, any>): boolean { const objProps = ["addressLine1","addressLine2","city","state_code","zip","county_name"]; return objProps.some(key => { const val = obj[key]; // 兼容值为null/undefined、空字符串、全空格字符串的无效场景 return val != null && (typeof val !== 'string' || val.trim().length > 0); }); }
如果你坚持用reduce实现,你的原代码主要有以下问题:
- reduce没有传初始空数组,第一次遍历的累加器默认会取数组第一个元素,不符合预期
- 没有处理值为null/undefined的场景,直接读取
.length会抛出类型错误 - 逻辑冗余,不需要做数组增删操作,直接统计有效键即可
修正后的reduce版本代码:
function hasAddressData(obj: Record<string, any>): boolean { const objProps = ["addressLine1","addressLine2","city","state_code","zip","county_name"]; const keysWithData = objProps.reduce((acc, key) => { const val = obj[key]; const isValid = val != null && (typeof val !== 'string' || val.trim().length > 0); if (isValid) acc.push(key); return acc; }, [] as string[]); // 必须传入初始空数组 return keysWithData.length > 0; }
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

