【问题标题】:Filter unique option values with Autocomplete component from Material UI使用 Material UI 中的自动完成组件过滤唯一选项值
【发布时间】:2021-06-07 09:25:36
【问题描述】:

我希望 Material UI 中的 Autocomplete 仅在下拉列表中列出对象列表中对象属性的唯一选项值。

在下面的示例中,下拉列表呈现一个包含值 ['Color1', 'Color2', 'Color1', 'Color2'] 的列表,但我希望它只呈现唯一值,例如 ['Color1', 'Color2']

这是对象列表:

options = [
    {
        id: 1,
        name: 'Name1',
        color: 'Color1'
    },
    {
        id: 1,
        name: 'Name2',
        color: 'Color2'
    },
    {
        id: 1,
        name: 'Name3',
        color: 'Color1'
    },
    {
        id: 1,
        name: 'Name4',
        color: 'Color2'
    },
]

这是Autocomplete的完整组件:

<Autocomplete
    freeSolo
    value={initialTasting}
    options={options}
    getOptionLabel={option => option.color}
    filterOptions={(options, state) => options}
    onChange={(e, value) => {setFieldValue('color', value.color)}}
    renderInput={params => (
        <TextField
            {...params}
            label={'Color'}
            variant='outlined'
            margin='dense'
            fullWidth
        />
    )}
/>

我把剩下的代码省略了,因为它太长了。它使用 FormikYup、有子组件等等。


我想我可以使用道具filterOptions 实现我想要的结果,但是,我做不到。我对 JavaScript 太陌生了..!

提前致谢。

【问题讨论】:

    标签: javascript autocomplete material-ui


    【解决方案1】:

    你觉得像这样更新你的选项数组怎么样?..

    function getUniqueListBy(arr, key) {
        return [...new Map(arr.map(item => [item[key], item])).values()]
    }
    
    const optionsUnique = getUniqueListBy(options, 'color');
    

    ...然后将optionsUnique&lt;Autocomplete /&gt;组件传递给options参数

    【讨论】:

    • 这不完全是我要找的,因为我将对表单中的每个字段重复相同的过程,而且我有很多......!但无论如何,我认为它现在有帮助。谢谢你的建议!
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2020-03-04
    • 1970-01-01
    • 2021-12-20
    • 2020-09-19
    • 2020-04-16
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多