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

React应用中JavaScript数组映射访问分类项实现方法

访问name为"Women"分类项的实现方案

针对你提到的大型数组场景,优先推荐基于Map结构的预映射方案,查询性能远高于每次遍历数组,适合需要频繁查找不同分类的业务场景。

方案1:Map预映射(优先推荐,适配大型数组)

先遍历一次数组构建「分类名-分类项」的映射表,后续所有查询都可以通过key直接取值,时间复杂度O(1):

// 构建映射表,仅需遍历一次全量数组
const categoryNameMap = new Map()
categoryObj.forEach(categoryItem => {
  categoryNameMap.set(categoryItem.name, categoryItem)
})

// 直接获取name为"Women"的分类项
const womenCategory = categoryNameMap.get("Women")

如果业务中可能存在多个同名分类项,可以把Map的value调整为数组格式存储所有匹配项:

const categoryNameMap = new Map()
categoryObj.forEach(categoryItem => {
  if (!categoryNameMap.has(categoryItem.name)) {
    categoryNameMap.set(categoryItem.name, [])
  }
  categoryNameMap.get(categoryItem.name).push(categoryItem)
})

// 拿到所有name为"Women"的分类项数组
const womenCategoryList = categoryNameMap.get("Women") || []

如果是在React组件中使用,建议用useMemo缓存映射表,避免组件每次重渲染都重复遍历大数组消耗性能:

import { useMemo } from 'react'

function CategoryComponent() {
  const categoryNameMap = useMemo(() => {
    const map = new Map()
    categoryObj.forEach(cate => map.set(cate.name, cate))
    return map
  }, [categoryObj]) // 仅当原数组变化时重新构建映射

  const womenCategory = categoryNameMap.get("Women")

  return (
    <div>
      {/* 用可选链避免未匹配到项时的报错 */}
      <h3>{womenCategory?.name}</h3>
      {womenCategory?.subCategory.map(subCate => (
        <div key={subCate.id}>{subCate.name}</div>
      ))}
    </div>
  )
}

方案2:单次查询简洁写法

如果仅需要做一次查询,不需要频繁查找其他分类,直接用数组find方法即可,写法更简洁,单次遍历的性能损耗在大数组下也可接受:

const womenCategory = categoryObj.find(item => item.name === "Women")

如果需要拿到所有name为"Women"的项,把find替换为filter即可:

const allWomenCategory = categoryObj.filter(item => item.name === "Women")

注意:拿到匹配项后建议加可选链?.再访问内部属性,避免数组中不存在对应项时抛出JS错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:54:14