复制
收藏
提问
简洁
this.dataPTR = this.dataPTR.map(item1 => { const matchingItem = resp.data.enrollChoosingDetailsAgencyList .filter(obj => obj.seniorBatch !==0 && obj.seniorBatch !==99 ) .find(item2 => item1.seniorBatch === item2.seniorBatch) item1.enrollChoosingSeniorRuleVoList.forEach((item,index)=>{ if(item?.seniorSub === matchingItem?.seniorSub){ item.enrollCode = matchingItem.enrollCode item.enrollName = matchingItem.enrollName } }) return matchingItem ? { ...item1, enrollCode: matchingItem.enrollCode, enrollName: matchingItem.enrollName } : item1 })优化代码
1个月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
优化 JavaScript 代码
- 避免重复查找:在
map
函数中,对resp.data.enrollChoosingDetailsAgencyList
的filter
和find
操作被执行多次,这可以优化以减少性能消耗。114 - 提前退出循环:在
forEach
循环中,一旦找到匹配项,可以中断循环,避免不必要的迭代。13 - 使用可选链:在访问
matchingItem
的属性时,使用可选链(?.
)来避免在null
或undefined
上调用属性,这可以减少错误发生。19
优化后的代码示例
this.dataPTR = this.dataPTR.map(item1 => {
// 预先筛选和查找,避免在每个 map 调用中重复
const filteredList = resp.data.enrollChoosingDetailsAgencyList
.filter(obj => obj.seniorBatch !== 0 && obj.seniorBatch !== 99);
const matchingItem = filteredList.find(item2 => item1.seniorBatch === item2.seniorBatch);
// 使用 forEach 并提前退出
item1.enrollChoosingSeniorRuleVoList.forEach((item, index) => {
if (matchingItem && item.seniorSub === matchingItem.seniorSub) {
item.enrollCode = matchingItem.enrollCode;
item.enrollName = matchingItem.enrollName;
// 找到匹配项后退出循环
return false; // 相当于 break
}
});
// 返回新对象或原对象
return matchingItem
? { ...item1, enrollCode: matchingItem.enrollCode, enrollName: matchingItem.enrollName }
: item1;
});
注意:优化代码时,确保逻辑正确性,并对修改后的代码进行充分测试。
你觉得结果怎么样?