暗黑破坏神2符文之语配方校验算法优化 基于用户库存筛选可制作符文之语
暗黑2符文之语匹配逻辑优化方案
核心优化思路
- 提前将库存数组转换为键为符文名称、值为持有数量的哈希映射,将符文查询耗时从O(n)降到O(1),大幅提升批量校验效率
- 用配方所需符文计数对比替代原实现中「深拷贝库存+逐符文扣减」的逻辑,省略深拷贝开销的同时也完全避免误改原始库存的风险
- 用数组
filter+every的流式调用替代原实现的循环+外置标记变量,逻辑更简洁可读,嵌套层级更低
优化后完整代码
calculatedRunewordList() { // 统计库存符文总数量,空库存直接返回全量符文之语 const totalStock = this.getInventory.reduce((sum, item) => sum + item.value, 0) if (totalStock <= 0) return this.getRunewordList.map(runeword => runeword.name) // 生成库存符文映射表:{ 符文名称: 持有数量 } const stockMap = this.getInventory.reduce((map, item) => { map[item.name] = item.value return map }, {}) // 筛选符合库存条件的符文之语 return this.getRunewordList.filter(({ recipe }) => { // 统计当前配方各符文所需数量 const requiredRunes = recipe.reduce((count, rune) => { count[rune] = (count[rune] || 0) + 1 return count }, {}) // 校验所有所需符文库存都满足要求 return Object.entries(requiredRunes).every(([rune, needCount]) => stockMap[rune] >= needCount) }).map(runeword => runeword.name) }
效果验证
你给出的测试用例运行后输出结果完全符合预期:
库存为[{name:'Tir',value:1},{name:'Ral',value:1},{name:'Tal',value:1},{name:'Sol',value:1},{name:'Ko',value:2},{name:'Mal',value:1}]时,返回结果为['Leaf', 'Prudence', 'Sanctuary', 'Insight']。
内容的提问来源于stack exchange,提问作者borsTiHD
相关产品推荐
相关产品推荐

