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

如何简化基于搜索字符串过滤对象中字符串和数字字段的函数?

简化对象过滤逻辑的方案

先修正原代码的两处问题

  1. searchString.toLowerCase()不会修改原字符串(字符串是不可变类型),必须将结果赋值给新变量才能生效;
  2. 原函数在Jobs?.orders不存在时返回undefined,建议统一返回空数组,避免后续处理出现类型异常。

方案一:指定字段列表(推荐,可控性高)

把需要检查的字段名存入数组,用some()遍历检查,新增字段只需在数组中添加,无需修改过滤逻辑:

function filterJobsBySearchQuery(searchString: string) {
    if (!Jobs?.orders) return [];
    const lowerSearch = searchString.toLowerCase();

    // 定义需要检查的字段集合
    const targetFields: Array<keyof typeof Jobs.orders[0]> = [
        'jobID',
        'jobDescription',
        'activationMethod',
        'jobStatusDescription',
        'status'
    ];

    return Jobs.orders.filter(item => {
        return targetFields.some(field => {
            const value = item[field];
            if (value == null) return false; // 跳过null/undefined值
            return String(value).toLowerCase().includes(lowerSearch);
        });
    });
}

方案二:自动遍历所有字符串/数字字段(无需手动列字段)

如果希望自动检查对象中所有字符串和数字类型的字段,无需手动维护字段列表,可以用Object.values()遍历对象值,再判断类型后检查:

function filterJobsBySearchQuery(searchString: string) {
    if (!Jobs?.orders) return [];
    const lowerSearch = searchString.toLowerCase();

    return Jobs.orders.filter(item => {
        return Object.values(item).some(value => {
            const valType = typeof value;
            // 仅检查字符串和数字类型
            if (valType !== 'string' && valType !== 'number') return false;
            return String(value).toLowerCase().includes(lowerSearch);
        });
    });
}

两种方案对比

  • 方案一:精准控制要检查的字段,避免误检对象中不需要公开搜索的字段(如内部标识、敏感数据),适合字段明确的场景;
  • 方案二:无需维护字段列表,新增字段自动纳入检查,但可能会包含一些不需要搜索的字段,适合对象字段全部需要搜索的场景。

内容的提问来源于stack exchange,提问作者SharePointBeginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:01:30