react antd table合并案例

1.合并方法,给data数据增加rowSpan值

/**
**data:tabel数据
**field:列key值
**/

const addRowSpan = (data: any[], field: string) => {
    let count = 0 //重复项的第一项
    let indexCount = 1 //下一项
    while (indexCount < data.length) {
        var item = data.slice(count, count + 1)[0] //获取没有比较的第一个对象
        if (!item.rowSpan) {
            item.rowSpan = 1 //初始化为1
        }
        if (item[field] === data[indexCount][field]) {
            //第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
            item.rowSpan++
            data[indexCount].rowSpan = 0
        } else {
            count = indexCount
        }
        indexCount++
    }
}

2.调用addRowSpan

let field = 'category'
addRowSpan(data, field) //处理数据

3.完整代码

import React from 'react';
import { Space, Table, Tag } from 'antd';
import type { ColumnsType } from 'antd/es/table';

interface DataType {
    key: number,
    category: string,
    name: string,
    desc: string,
    rowSpan: number
}

const columns: ColumnsType<DataType> = [
    {
        title: '种类',
        dataIndex: 'category',
        key: 'category',
        onCell: (record, index) => {
            // console.log(record.category, record.rowSpan)
            return { rowSpan: record.rowSpan }
        },
    },
    {
        title: '名字',
        dataIndex: 'name',
        key: 'name',
        render: (text) => <a>{text}</a>,
    },

    {
        title: '描述',
        dataIndex: 'desc',
        key: 'desc',
    }
];

const data: any[] =
    [
        {
            key: 0,
            category: '水果',
            name: '桃子',
            desc: '好吃',
        },
        {
            key: 1,
            category: '水果',
            name: '梨子',
            desc: '真好吃',
        },
        {
            key: 2,
            category: '蔬菜',
            name: '茄子',
            desc: '真好吃',
        },
        {
            key: 9,
            category: '蔬菜',
            name: '茄子',
            desc: '真好吃',
        },
        {
            key: 3,
            category: '家禽',
            name: '牛肉',
            desc: '太好吃了',
        },
        {
            key: 4,
            category: '家禽',
            name: '羊肉',
            desc: '真不错',
        },
        {
            key: 5,
            category: '家禽',
            name: '猪肉',
            desc: '吃不起,太贵',
        },
        {
            key: 4,
            category: '家禽',
            name: '羊肉',
            desc: '真不错',
        },
        {
            key: 5,
            category: '家禽',
            name: '猪肉',
            desc: '吃不起,太贵',
        },
    ]

const addRowSpan = (data: any, field: string) => {
    let count = 0 //重复项的第一项
    let indexCount = 1 //下一项
    while (indexCount < data.length) {
        var item = data.slice(count, count + 1)[0] //获取没有比较的第一个对象
        if (!item.rowSpan) {
            item.rowSpan = 1 //初始化为1
        }
        if (item[field] === data[indexCount][field]) {
            //第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
            item.rowSpan++
            data[indexCount].rowSpan = 0
        } else {
            count = indexCount
        }
        indexCount++
    }
}
let field = 'category'
addRowSpan (data, field) //处理数据

const App: React.FC = () => <Table columns={columns} bordered dataSource={data} />;

export default App;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值