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

如何通过影片名称而非ID筛选items2列表数据?

解决方案:通过影片名称筛选关联数据

问题核心

需要基于items1中的movieName关键词,筛选出items2里关联的对应数据。当前存在两个关键问题:

  • items2中的电影ID字段大小写不统一(MovieId/movieId)
  • 之前尝试的代码存在变量名错误、逻辑偏差(比如用map导致返回undefined,未正确关联两个数组的ID)

优化实现方案

方案1:高效映射版(推荐)

先把items1转换成ID与名称的映射表,避免反复遍历数组,提升搜索效率:

useEffect(() => {
  if (keyword) {
    const lowerKeyword = keyword.toLowerCase();
    // 先筛选出名称匹配的电影ID列表
    const matchedMovieIds = items1
      .filter(movie => movie.movieName.toLowerCase().includes(lowerKeyword))
      .map(movie => movie._id);
    
    // 筛选items2中关联的项,兼容大小写不同的ID字段
    const result = items2.filter(item => {
      const itemMovieId = item.MovieId || item.movieId;
      return matchedMovieIds.includes(itemMovieId);
    });
    
    setData(result);
  } else {
    setData(items2);
  }
}, [keyword, items1, items2]);

方案2:复用现有search函数版

如果想保留已有的search函数,可以按以下方式修改:

useEffect(() => {
  if (keyword) {
    // 用现有search函数找出名称匹配的电影
    const matchedMovies = search(items1, keyword, ["movieName"]);
    // 提取这些电影的ID集合
    const matchedIds = matchedMovies.map(m => m._id);
    
    // 筛选items2中符合条件的项,兼容ID字段大小写
    const result = items2.filter(item => {
      const id = item.MovieId || item.movieId;
      return matchedIds.includes(id);
    });
    
    setData(result);
  } else {
    setData(items2);
  }
}, [keyword, items1, items2]);

你之前代码的错误点

  1. 变量名错误:item1应为items1,items._id应为movie._id
  2. 方法误用:map会遍历所有items2元素并返回结果,不匹配的项会返回undefined,应该用filter筛选符合条件的项
  3. 作用域错误:setData(x)中的x是map内部变量,外部无法访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:43:08