如何从JS对象中按搜索值获取对应键值,及遍历匹配异常问题排查
问题分析
- 核心错误是遍历逻辑设计错误:
Object.entries(map)会把所有键值对拆成数组逐个遍历,你给每一次遍历都加了二选一的输出逻辑,只要匹配到某一个键值对时,其他没匹配到的键值对都会触发not found输出。比如你配置了2个关键词,输入存在的关键词时,就会输出1条对应URL+1条not found,配置了N个关键词就会输出N-1条多余的not found。 - 额外注意:这里不需要用
map方法,map的作用是生成新数组,你只是要做匹配查找,属于方法误用。
修复代码
你可以直接用find方法先查找匹配项,再统一做输出判断,性能和逻辑都更合理:
$(document).ready(function(){ $("#searchKeywords").on("keypress", function(e){ if(e.which == 13){ const map = { "home" : "/homepage", "about" : "/about-us" } const searchVal = $("#searchKeywords").val().trim() // 查找匹配的键值对 const matchedItem = Object.entries(map).find(([keyword]) => keyword === searchVal) if(matchedItem){ console.log(matchedItem[1]) window.location.href = matchedItem[1] }else{ console.log('not found') } } }); })
补充说明:你最开始直接通过对象属性访问的写法性能更好,不需要遍历所有键值对,除非你后续要做模糊匹配等特殊逻辑,否则没必要改用遍历的实现方式。
内容的提问来源于stack exchange,提问作者fikfe
相关产品推荐
相关产品推荐

