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

如何匹配对象数组与ID数组的对应值并正确渲染内容到页面

问题解决方法

问题根因

  • 你使用了forEach做外层遍历,forEach本身没有返回值,执行结束后返回undefined,JSX无法渲染undefined内容,所以页面没有输出。
  • 嵌套遍历的写法性能较差,数据量较大时会产生不必要的重复遍历开销。

实现方案

建议先把分类数据转成ID到名称的映射表,再遍历ID数组渲染匹配项,逻辑更清晰性能也更好:

1. 预构建映射表

// 可以放在组件渲染逻辑外或者useMemo里缓存,避免重复生成
const genreMap = new Map(genres.map(item => [item.id, item.name]))

2. 渲染逻辑改写

<ul className={`${isHover ? 'block' : 'hidden' } flex space-x-3 text-white font-semibold pb-5`}>
  {
    typeIds
      // 如果需要对重复ID去重,可开启下一行注释
      // .filter((id, index, arr) => arr.indexOf(id) === index)
      .map((id, key) => {
        const name = genreMap.get(id)
        // 仅渲染匹配到的项
        return name ? <li key={key}>{name}</li> : null
      })
  }
</ul>

如果要保留你原有的嵌套逻辑写法,只需要把外层的forEach换成map,同时用flat()打平嵌套返回的数组即可:

<ul className={`${isHover ? 'block' : 'hidden' } flex space-x-3 text-white font-semibold pb-5`}>
  {
    genres.map(element => {
      return typeIds.map((res, key) => {
        if (element.id === res) {
          return <li key={key}>{element.name}</li>
        }
        return null
      })
    }).flat()
  }
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:08