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

React.js如何通过多选框选中状态过滤对象数组类型的电影数据

实现方案

核心映射逻辑梳理

明确现有数据的对应关系:

  • 评分多选框:除id=0(代表任意评分)外,多选框id与电影rating字段值完全相等,可以直接匹配
  • 流派多选框:除id=0(代表任意流派)外,id与流派名称的对应关系如下:
    • 1 → Action
    • 2 → Comedy
    • 3 → Drama
    • 4 → Thriller

具体代码修改

只需修改App.js中的handleFilters方法即可,完整代码如下:

const handleFilters = (checkboxState, key) => {
    const newFilters = {...selected};
    newFilters[key] = checkboxState;
    
    // 流派id到名称的映射表
    const genreIdMap = {
        1: 'Action',
        2: 'Comedy',
        3: 'Drama',
        4: 'Thriller'
    };

    // 执行筛选逻辑
    const filteredMovies = data.filter(movie => {
        // 匹配评分规则
        let isRatingMatch = true;
        const selectedRatings = newFilters.rating;
        // 选了任意评分或者没有选中任何评分则不限制
        if (selectedRatings.length && !selectedRatings.includes(0)) {
            isRatingMatch = selectedRatings.includes(movie.rating);
        }

        // 匹配流派规则
        let isGenreMatch = true;
        const selectedGenres = newFilters.genre;
        // 选了任意流派或者没有选中任何流派则不限制
        if (selectedGenres.length && !selectedGenres.includes(0)) {
            const allowedGenres = selectedGenres.map(id => genreIdMap[id]);
            isGenreMatch = allowedGenres.includes(movie.genre);
        }

        // 两个条件同时满足才会保留
        return isRatingMatch && isGenreMatch;
    });

    setMovies(filteredMovies);
    setSelected(newFilters);
};

可选交互优化建议

如果需要实现「选中任意选项时自动取消同组其他选中项」的效果,可以修改Checkboxes组件的onChangeHandler方法:

const onChangeHandler = (checkboxId) => {
    let newState = [];
    if (checkboxId === 0) {
        // 选中任意时,只保留0
        newState = [0];
    } else {
        // 选中其他选项时,移除已经选中的0,再处理当前选项的选中状态
        const withoutAny = checkedArray.filter(id => id !== 0);
        newState = handleToggle(checkboxId, withoutAny);
    }
    setCheckedArray(newState);
    handleFilters(newState);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:54:06