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

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
修复方法

只需要在匹配前去掉地址分段字符串的首尾空格即可,两种常用实现:

  1. 过滤时实时做空格清理:
const city = cities.filter((el) => addressSplits.some(seg => seg.trim() === el.name));
  1. 提前预处理地址数组生成无空格的匹配池,再做匹配:
const trimmedSegments = addressSplits.map(seg => seg.trim());
const city = cities.filter((el) => trimmedSegments.includes(el.name));

执行修复后的代码,就能正确返回_id为SFuvn99mtn5qgZrXh、name为Delhi的城市对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:36:27