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

react-admin中SelectInput如何过滤choices重复值仅展示唯一选项

可行解决思路

首先明确:你尝试在optionText对应的渲染组件里返回null的方案不可行,该方式仅能隐藏选项文本,无法移除整个选项节点,最终会出现多条空白选项,达不到去重效果。

最优方案是提前对传入SelectInput的choices数据源做去重预处理,具体实现如下:

方案1:保留单个同名称项的ID(适用于选择后匹配单条记录的场景)

如果你选择car1后仅需要对应任意一个同名称的ID即可,可以通过Map对原始数据按名称去重,保留每个名称的第一条记录:

// 原始数据源
const rawData = [{name: "car1",id: 1,}, {name: "car1",id: 2,}, {name: "car2",id: 3,}];
// 按name去重处理
const uniqueChoices = Array.from(
  new Map(rawData.map(item => [item.name, item])).values()
);

将处理后的uniqueChoices传入SelectInput的choices属性即可:

<SelectInput 
  choices={uniqueChoices}
  optionText={<Choice/>}
/>

const Choice = ({record}) => {
  return(
    <span>{record?.name}</span>
  )
}

方案2:以名称作为选择值(适用于选择后匹配所有同名称记录的场景)

如果你选择car1后需要筛选所有名称为car1的记录,可以将name作为选项值,直接提取所有不重复的名称作为选项:

const rawData = [{name: "car1",id: 1,}, {name: "car1",id: 2,}, {name: "car2",id: 3,}];
const uniqueChoices = [...new Set(rawData.map(item => item.name))].map(name => ({
  id: name,
  name
}));

传入组件时指定optionValue为name即可:

<SelectInput 
  choices={uniqueChoices}
  optionText="name"
  optionValue="name"
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:21:02