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

JS技术问题:如何根据ID匹配为selectedCategories数组添加对应name属性

问题解决:为selectedCategories添加对应name属性

现有两个数组:

  • categories 对象数组,包含分类的id和名称:
[
  { "id": 1, "name": "FURNITURE" },
  { "id": 2, "name": "AUTOMOTIVE" },
  { "id": 3, "name": "UPHOLSTERY" }
]
  • selectedCategories 数组,仅包含选中分类的id:
[
  { "id": 1 },
  { "id": 3 }
]

需求:根据id匹配规则,将categories中对应的name属性添加到selectedCategories的对应对象中。


你的尝试代码存在两个核心问题:

  1. 直接给selectedCategories数组本身赋值name属性,而非数组中的单个元素;
  2. 没有判断id是否相等,导致最终只会赋值最后一个分类的name。

正确实现方法

方法一:修复嵌套循环

for (let i = 0; i < selectedCategories.length; i++) {
  const selectedItem = selectedCategories[i];
  for(let y = 0; y < categories.length; y++){
    const category = categories[y];
    if (selectedItem.id === category.id) {
      selectedItem.name = category.name;
      break; // 找到匹配项后跳出内层循环,减少不必要遍历
    }
  }
}

方法二:用Map优化性能(推荐大数据量场景)

通过构建id到name的映射表,将查找效率从O(n)提升到O(1):

// 构建id与name的映射Map
const categoryNameMap = new Map(categories.map(cat => [cat.id, cat.name]));

// 为选中分类批量添加name属性
selectedCategories.forEach(item => {
  item.name = categoryNameMap.get(item.id);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:55:16