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

Vue中根据ID匹配获取对象多属性的优化方案问询

优化Vue中玩家与动作匹配的渲染性能

你可以通过提前将actions数组转换为以ID为键的映射对象,实现一次预处理、多次O(1)快速查找,彻底避免每行重复执行reduce的问题,具体实现如下:

1. 用计算属性生成动作映射

利用Vue的计算属性(自带缓存,仅当actions变化时重新计算),把actions转成键值对结构:

computed: {
  actionMap() {
    return this.actions.reduce((map, action) => {
      map[action.id] = action;
      return map;
    }, {});
  }
}

转换后actionMap的结构为:

{
  0: { id: 0, label: "Give advice", description: "Player advises others" },
  1: { id: 1, label: "Fight", description: "Player fights enemy" }
}

2. 模板中直接调用映射对象

循环渲染玩家时,直接通过actionMap[player.action]获取完整的动作对象,按需提取属性即可,无需重复执行匹配逻辑:

<table>
  <tr v-for="player in player" :key="player.id">
    <td>{{ player.name }}</td>
    <td>{{ actionMap[player.action]?.label }}</td>
    <td>{{ actionMap[player.action]?.description }}</td>
  </tr>
</table>

这里的?.是可选链操作符,能避免因player.action不存在对应ID时出现报错,提升代码健壮性。

额外说明

如果你的actions是静态数据(不会动态变化),也可以在created钩子中一次性转换并存入data,但计算属性更适合响应式场景,能自动监听actions的变化并更新映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:07:22