JSON数组查找员工对象时重复输出‘未找到’的问题排查
问题原因
- 你用了
map方法遍历数组,map的特性是迭代数组里的每一个元素并执行回调函数。当输入不存在的员工ID时,数组中的每个元素都会触发else分支,所以会打印两次"not found"。 map的设计目的是转换数组元素生成新数组,不是用来查找元素,这里属于方法误用。
修正方案
改用find方法,它会遍历数组直到找到第一个匹配的元素,找不到则返回undefined。这样只需在遍历结束后判断结果,就能保证"not found"只输出一次。
修正后的代码:
var E_ID let empArray = [ { "employee": { "employee_ID": 16, "employee_designation": "Node.js", "employee_FirstName": "John", "employee_lastName": "Doe" } }, { "employee": { "employee_ID": 17, "employee_designation": "Full Stack", "employee_FirstName": "Samual", "employee_lastName": "Smith" } } ] function search_EmployeeByID(E_ID) { const foundEmployee = empArray.find(item => item.employee.employee_ID === E_ID); if (foundEmployee) { console.log(foundEmployee.employee); } else { console.log("not found"); } } E_ID = parseInt(prompt("Enter Employee_ID to search for:")) search_EmployeeByID(E_ID);
额外优化点
- 原代码中对象末尾有多余逗号(比如
"employee_lastName": "Doe",),虽然多数浏览器兼容,但可能引发语法错误,建议删除。 - 判断相等时使用
===严格相等运算符,避免类型转换导致的意外问题。
内容的提问来源于stack exchange,提问作者Muhammad Sohaib 3837-FBASBSSEF
相关产品推荐
相关产品推荐

