You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:09:04