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

React中如何根据另一数组匹配值输出数组内对象内容

实现根据选中ID匹配并渲染对应数据对象

给定代码

数据源数组

const data = [
    {
      id: 1,
      category: "ladders",
      name: "N/A",
      price: 0,
    },
    {
      id: 2,
      category: "ladders",
      name: "Ladder 1",
      price: 220,
    },
    {
      id: 3,
      category: "ladders",
      name: "Ladder 2",
      price: 420,
    },
    {
      id: 4,
      category: "ladders",
      name: "Ladder 3",
      price: 515,
    },
]

选中状态的useState

const [selections, setSelections] = useState({
  ladders: [2, 4]
});

重构方案

不需要手动指定索引,你可以通过以下两种方式实现匹配渲染:

方案一:筛选出匹配数据后渲染

先把选中的ID转成Set提升查找效率,再从数据源中过滤出匹配项,最后直接渲染过滤后的数组:

// 把选中ID转为Set,优化查找性能
const selectedLadderIds = new Set(selections.ladders);
// 过滤出所有ID匹配的梯子对象
const selectedLadders = data.filter(item => selectedLadderIds.has(item.id));

JSX渲染部分:

<div className="selected-ladders">
  {selectedLadders.map(ladder => (
    <div key={ladder.id} className="ladder-item">
      <h3>{ladder.name}</h3>
      <p>价格:${ladder.price}</p>
    </div>
  ))}
</div>

方案二:按选中ID顺序渲染

如果需要严格遵循selections.ladders中的ID顺序渲染,可以直接遍历选中ID数组,通过find找到对应对象:

<div className="selected-ladders">
  {selections.ladders.map(ladderId => {
    // 查找对应ID的梯子对象
    const matchedLadder = data.find(item => item.id === ladderId);
    // 处理ID无效的情况,避免渲染错误
    if (!matchedLadder) return null;
    
    return (
      <div key={matchedLadder.id} className="ladder-item">
        <h3>{matchedLadder.name}</h3>
        <p>价格:${matchedLadder.price}</p>
      </div>
    );
  })}
</div>

两种方案对比

  • 方案一:渲染顺序和data数组一致,适合只需要展示所有选中项、不关心顺序的场景,性能更优(尤其数据量大时)。
  • 方案二:渲染顺序和selections.ladders中的ID顺序一致,适合需要保持选中顺序的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:35:20