JavaScript过滤对象数组时如何跳过空值对应的筛选条件
筛选逻辑优化方案
原代码强制要求两个字段同时匹配传入的参数,空参数也会被当作匹配条件参与校验,才会出现空参数返回空数组的问题。只需调整filter内的判断逻辑:参数为空时直接跳过对应字段的匹配校验即可,优化后的代码如下:
let list = [{ "index": 4, "chain": "aaa", "officeId": "bbb" }, { "index": 5, "chain": "ccc", "officeId": "ddd" }]; function search(chain, office) { let data = list.filter(function(result) { // 核心逻辑:参数非空才校验匹配,参数为空则该条件直接通过 return (chain ? result.chain === chain : true) && (office ? result.officeId === office : true); }); console.log(data); } // 以下调用均返回 [{index:4, chain:"aaa", officeId:"bbb"}] search('aaa','bbb'); search('aaa',''); search('', 'bbb'); // 该调用返回完整原始list数组 search('', '');
可选增强逻辑
如果需要兼容参数为undefined、null、全空格的场景,可调整判断逻辑如下,覆盖更多异常输入场景:
return (!chain?.trim() || result.chain === chain) && (!office?.trim() || result.officeId === office);
内容的提问来源于stack exchange,提问作者IamGrooot
相关产品推荐
相关产品推荐

