AJAX返回对象中查找值数组包含搜索文本的对应键名问题
报错原因与解决方案
报错根因
你遇到的includes is not a function类型错误,是因为遍历案件对象所有属性时,部分属性的值不是数组:比如id为数字类型、caseStatus/awardDate为普通字符串类型,这些类型本身没有includes方法,调用时就会抛出异常。
修复方案
1. 修改查值函数,先做类型校验
调整getKeyByValue函数,先判断属性值是否为数组,再执行匹配逻辑:
function getKeyByValue(object, value) { return Object.keys(object).find(key => { const currentVal = object[key]; // 仅对数组类型的属性执行匹配,过滤非人员属性 return Array.isArray(currentVal) && currentVal.includes(value); }); }
2. 新增角色映射表(可选,优化展示效果)
你拿到的匹配结果是后端字段名(比如lawyerClaimant),可以通过映射表转换成表格需要的友好展示名:
const roleDisplayMap = { chairperson: '首席仲裁员', arbitratorClaimant: '仲裁员(申请人方)', arbitratorRespondent: '仲裁员(被申请人方)', secretary: '书记员', lawyerClaimant: '律师(申请人方)', lawyerRespondent: '律师(被申请人方)', expertClaimant: '专家证人(申请人方)', expertRespondent: '专家证人(被申请人方)' }
3. 补全表格渲染逻辑
你可以参考下面的代码补全现有逻辑,完成表格渲染:
if (cases.length >= 1) { for (var i in cases.slice(0,3)) { const currentCase = cases[i]; const matchedRoleKey = getKeyByValue(currentCase, requestCase); // 仅渲染匹配到角色的有效记录 if (matchedRoleKey && roleDisplayMap[matchedRoleKey]) { caseTable += ` <tr> <td>${currentCase.name}</td> <td>${requestCase}</td> <td>${roleDisplayMap[matchedRoleKey]}</td> <td>${currentCase.caseStatus}</td> </tr>` } } // 闭合表格标签,插入到页面容器 caseTable += '</tbody></table>'; document.getElementById('你的表格容器ID').innerHTML = caseTable; }
补充优化建议
- 如果同一个人在单案件中存在多个角色,可以把函数中的
find改为filter,拿到所有匹配的角色键后拼接展示即可。 - 建议对用户输入值、接口返回的姓名字段统一做trim去空格、大小写归一处理,避免格式差异导致匹配失败。
内容的提问来源于stack exchange,提问作者Greg King
相关产品推荐
相关产品推荐

