You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实现,你的原代码主要有以下问题:

  1. reduce没有传初始空数组,第一次遍历的累加器默认会取数组第一个元素,不符合预期
  2. 没有处理值为null/undefined的场景,直接读取.length会抛出类型错误
  3. 逻辑冗余,不需要做数组增删操作,直接统计有效键即可

修正后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:36:05