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

如何在JS的.find()中验证多条件,合并显示客户/供应商名称?

解决方案

核心思路

在渲染表格列时,先尝试通过contact_id_customer从contactNames数组中查找客户名称,如果未找到匹配项,再通过contact_id_provider查找供应商名称;若业务需求是优先显示供应商,调换顺序即可。这样就能保证同一列显示对应角色的名称。

示例代码实现

假设你的contactNames数组结构如下:

const contactNames = [
  { id: 'cust_123', name: 'XX科技有限公司' },
  { id: 'prov_456', name: 'YY通信服务商' },
  // ...更多联系人数据
];

在CDRTable组件的列定义中,修改该列的渲染逻辑:

// 表格列配置示例
const columns = [
  // ...其他列
  {
    title: '关联方名称',
    dataIndex: '', // 无需绑定固定dataIndex,自定义渲染
    render: (record) => {
      // 优先查找客户名称
      const customer = contactNames.find(item => item.id === record.contact_id_customer);
      if (customer) {
        return customer.name;
      }
      // 客户不存在则查找供应商名称
      const provider = contactNames.find(item => item.id === record.contact_id_provider);
      return provider ? provider.name : '未知';
    },
  },
  // ...其他列
];

性能优化建议

如果contactNames数据量较大,多次调用find()会影响性能,可以先将contactNames转换为以id为键的对象,把查找效率从O(n)降到O(1):

// 在组件初始化或contactNames更新时转换
const contactMap = useMemo(() => {
  return contactNames.reduce((map, item) => {
    map[item.id] = item.name;
    return map;
  }, {});
}, [contactNames]);

// 渲染逻辑简化为:
render: (record) => {
  return contactMap[record.contact_id_customer] 
    || contactMap[record.contact_id_provider] 
    || '未知';
}

问题排查点

你之前的写法只返回供应商名称,大概率是查找顺序写反或判断逻辑有误(比如后查找的结果覆盖了先查找的客户名称)。检查原代码是否存在类似错误:

// 错误示例:先找供应商,后找客户,但客户结果被覆盖
let name = contactNames.find(item => item.id === record.contact_id_provider)?.name;
name = contactNames.find(item => item.id === record.contact_id_customer)?.name || name;
// 正确顺序应为先客户后供应商

内容的提问来源于stack exchange,提问作者Rosh343

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:01:02