JS中filter结合includes匹配存在项为何返回空数组?
异常返回原因
核心原因是字符串的前置空格导致精确匹配失败:
addressSplits数组中存储的地址分段值,除了最后一项DLF Place,其余三项开头都带有多余的半角空格,你要匹配的Delhi在数组里实际存储为' Delhi'(开头多1个空格)。Array.includes()方法执行的是严格相等匹配,判断规则和===完全一致:cities里的城市名是无前后空格的'Delhi',和带前置空格的' Delhi'是两个完全不同的字符串,自然无法被匹配到,最终filter返回空数组。
匹配规则验证
可以直接执行以下代码验证严格匹配的结果:
// 带空格的字符串和无空格字符串不相等 console.log(' Delhi' === 'Delhi'); // 输出 false // 带空格的数组项无法匹配无空格的目标值 console.log([' Delhi'].includes('Delhi')); // 输出 false
修复方法
只需要在匹配前去掉地址分段字符串的首尾空格即可,两种常用实现:
- 过滤时实时做空格清理:
const city = cities.filter((el) => addressSplits.some(seg => seg.trim() === el.name));
- 提前预处理地址数组生成无空格的匹配池,再做匹配:
const trimmedSegments = addressSplits.map(seg => seg.trim()); const city = cities.filter((el) => trimmedSegments.includes(el.name));
执行修复后的代码,就能正确返回_id为SFuvn99mtn5qgZrXh、name为Delhi的城市对象。
内容的提问来源于stack exchange,提问作者Amr Shawki
相关产品推荐
相关产品推荐

