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

React JSX中.map嵌套.filter匹配两数组同ID项渲染问题

正确实现代码

核心逻辑是在遍历分类数组的每一项时,用当前项的id对第二个数组做筛选,拿到所有关联的筛选项后再做二次遍历渲染,注意JSX返回的元素需要包裹在单个根节点下,列表渲染必须加唯一key属性。

{
  filterListDataName &&
    filterListDataName.map(function (item) {
      // 筛选当前分类下的所有筛选项
      const relatedOptions = filterListDataText.filter(
        (option) => option.filter_name_id === item.id
      );
      return (
        <div key={item.id} className="filter-block">
          <label>{item.name}</label>
          {/* 遍历渲染筛选出的关联项,可根据业务需求替换为checkbox/radio等控件 */}
          <div className="option-list">
            {relatedOptions.map((opt) => (
              <span key={opt.text} className="option-item">
                {opt.text}
              </span>
            ))}
          </div>
        </div>
      );
    }.bind(this))
}

优化写法参考

  • 原代码直接返回<label>后追加内容会触发JSX语法错误,必须用单个父标签(或React.Fragment空标签)包裹同组的分类名和对应筛选项
  • 列表渲染的key属性优先用数据自带的唯一id,示例中子项没有单独id,用不重复的text字段临时替代即可
  • 如果使用ES6箭头函数,可以直接去掉末尾的.bind(this),箭头函数会自动继承外层上下文,搭配可选链?.代替原来的&&空值判断,写法更简洁:
{
  filterListDataName?.map(item => {
    const relatedOptions = filterListDataText.filter(opt => opt.filter_name_id === item.id);
    return (
      <div key={item.id} className="filter-block">
        <label>{item.name}</label>
        <div className="option-list">
          {relatedOptions.map(opt => <span key={opt.text}>{opt.text}</span>)}
        </div>
      </div>
    )
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:21:31