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的对应对象中。
你的尝试代码存在两个核心问题:
- 直接给
selectedCategories数组本身赋值name属性,而非数组中的单个元素; - 没有判断
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
相关产品推荐
相关产品推荐

