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

如何用JavaScript按数组所有值过滤数据?代码问题求助

根据服务数组过滤匹配的服务项

你的思路方向是对的,但现有代码里有两个关键问题导致过滤逻辑不生效:

  1. arrayOfServices.values() 返回的是数组迭代器对象,不是具体的服务名称字符串,includes 方法没法和这个迭代器做有效匹配
  2. 逻辑方向搞反了:你需要检查「数组里的任意一个服务名称是否被包含在当前项的service.name中」,而不是反过来判断service.name是否包含迭代器

给你修正后的可运行代码:

filterPrestationsByServiceSelected(arrayOfServices) {
  console.log(arrayOfServices); // ['Repassage', 'Couture']
  this.filteredPrestationsByService = this.filteredPrestations.filter(item => {
    // 用some()遍历服务数组,只要有一个名称被包含就保留当前项
    return arrayOfServices.some(serviceName => item.service.name.includes(serviceName));
  });
}

关键逻辑解释:

  • arrayOfServices.some(...):遍历传入的服务数组,只要有一个元素满足条件就返回true,这样filter就会把当前item保留下来
  • item.service.name.includes(serviceName):检查当前项的服务名称是否包含数组中的某个关键词(如果需要忽略大小写,可以转成统一大小写:item.service.name.toLowerCase().includes(serviceName.toLowerCase()))

额外优化:处理空数组场景

如果用户没有选中任何服务(arrayOfServices为空),可以直接返回所有已过滤的项,避免空数组导致没有结果返回:

filterPrestationsByServiceSelected(arrayOfServices) {
  console.log(arrayOfServices); // ['Repassage', 'Couture']
  
  // 空数组时返回全部已过滤项
  if (!arrayOfServices.length) {
    this.filteredPrestationsByService = [...this.filteredPrestations];
    return;
  }

  this.filteredPrestationsByService = this.filteredPrestations.filter(item => {
    return arrayOfServices.some(serviceName => 
      item.service.name.toLowerCase().includes(serviceName.toLowerCase())
    );
  });
}

这样就能完美实现你要的「保留所有service.name包含数组中任意值的项」的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:32:41