Antd-Table filters:某列数据的不重复所有值展示筛选+不区分大小写搜索

问题一:某列的所有数据可以被不重复地展示并筛选

期望

table中内置filters属性可以对表格筛选,
当前所有数据中只有空/343456…过的两个值,
在这里插入图片描述
希望在内置的筛选框中出现这两个值且不重复展示,可以选择并筛选
在这里插入图片描述

解决

这时可以对数据进行处理:

  1. 首先引用loadsh库
  2. 将表数据logList 使用Lodash _.chain()方法,用于包装启用显式方法链序列的值。
  3. 使用Lodash _.uniq()去重
    let y = (['a', 'b', 'c', 'e', 'd', 'd', 'g', 'i', 'i']);      
    let arr = _.uniq(y); 
    输出:['a''b''c''e''d''g''i']
  1. map映射将text和value都设为item,最后取value
import _ from 'lodash'

filters: _.chain(logList)
        .map(item => item.needName)
        .uniq()
        .map(item => ({
          text: item,
          value: item,
        }))
        .value(),

完整该列属性代码:

import _ from 'lodash'

const column = [{
      title: '需求名称',
      dataIndex: 'needName',
      key: 'needName',
      width: 120,
      render: text => text || '-',
      filters: _.chain(logList)
        .map(item => item.needName)
        .uniq()
        .map(item => ({
          text: item,
          value: item,
        }))
        .value(),
      onFilter: (value, record) => record.needName === value,
      filterIcon: filtered =>
        filtered ? (
          <IconFont type="iconshaixuanmianxing" />
        ) : (
          <IconFont type="iconshaixuanxianxing" />
        ),
}]

问题二:带搜索的select不区分大小写

解决

筛选options.children之中是否包含输入的val值,将所有选项和输入值转化为小写/大写,再进行比对,就能显示不区分大小写的符合选项。

filterOption={(val, option) => {
	return option?.children?.toLowerCase().indexOf(val?.toLowerCase()) >= 0
}}

toLowerCase()方法
一、说明:把输入字符串中的大写字母全部变成小写字符。
二、实例:

var str = “JavaScript”;
var newStr = str.toLowerCase();

toUpperCase()方法
一、说明:把输入字符串中的小写字母全部变成大写字符。
二、实例:

var str = “JavaScript”;
var newStr = str.toUpperCase();

注意:对中文没影响;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你脸上有BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值