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

React中如何按条件显示/隐藏评分≥60的JSON电影数据

React过滤展示评分≥60电影的实现方法

核心需要做三处调整:兼容处理数据集中格式不统一的观众评分字段、修正现有接口数据赋值的逻辑问题、在筛选规则中增加评分阈值判断。


1. 统一解析不同格式的评分值

你的数据集里viewer_rating存在两种存储格式:纯数字(比如54/68)、带百分号的字符串(比如"42%"),直接做数值比较会触发类型错误,先在组件内部写一个评分解析工具函数,和状态声明逻辑平级即可:

// 把不同格式的评分统一转换为可比较的数值
const parseViewerRating = (ratingVal) => {
  if (typeof ratingVal === 'number') return ratingVal;
  if (typeof ratingVal === 'string') return Number(ratingVal.replaceAll('%', ''));
  // 格式异常的评分默认按0处理,直接过滤
  return 0;
};

2. 修正接口返回数据的赋值逻辑

你请求的接口返回结构是{ movies: [电影条目数组] },但现有代码直接把整个返回对象赋值给了items状态,会导致后续遍历逻辑出错,修改useEffect中请求成功的回调代码:

.then(
  (result) => {
    setLoaded(true);
    // 直接提取返回结构中的movies数组赋值给状态
    setItems(result.movies);
  },
  (error) => {
    setLoaded(true);
    setError(error);
  }
);

对应把后面的const data = Object.values(items);直接修改为const data = items;即可,此时items已经是标准的电影条目数组,不需要再做对象值提取。

3. 在筛选逻辑中增加评分阈值判断

修改现有的search筛选函数,新增评分≥60的判断条件,和已有的类型筛选、关键词搜索条件取交集:

function search(items) {
  return items.filter((item) => {
    const currentRating = parseViewerRating(item.viewer_rating);
    // 同时满足三个条件才保留条目:评分≥60、匹配选中的分类、匹配搜索关键词
    return currentRating >= 60
      && item.genre.includes(filter)
      && item.title.toString().toLowerCase().includes(query);
  });
}

效果说明

修改完成后,评分54的《Spiderhead》、评分42的《THE MAN FROM TORONTO》会被自动过滤隐藏,只有评分68的《Public Enemies》会在列表中正常渲染。后续新增的电影条目只要观众评分低于60都会被自动隐藏,解析逻辑同时兼容数字、百分号字符串两种评分格式,不会出现判断异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:45:40