用JS实现删除一行数据,并重新排序功能

备注:基于antd的table组件,涉及敏感数据已替换。

在做项目时候,产品提出一个需求,点击表格的删除按钮后

期待效果:删除当前行数据,后排数据向上移动。具体如下:排序和头像需要保持原来的排序功能(1-头像1,2-头像2,3-头像3   删除第二行后依然保持1-头像1,2-头像2 ), 姓名,成绩,备注则删掉当前行数据

分析过程: 

原始数据:

  如果直接删除第二行数据,那么会变成1-头像1,3-头像3,4-头像4

如何解决呢,刚开始我用思路1实现的,想起来简单,但后面随着业务复杂一路血泪史,不堪回首。。

思路1:把排序,头像,姓名,成绩,备注  拆成两个数组,其中排序,头像为listLeft,姓名,成绩,备注为数组listRight, 点击删除按钮时候永远删除listLeft最后一列,listRight删除当前行即可。最后把listLeft和listRight合并重新组成新数组用来渲染。

优缺点: 思路简单,但实现起来代码量复杂,尤其牵扯到异步更新数组,校验等复杂业务,中间数组很多时候难以追踪,不好维护。

有没有简单一点的方案呢,

思路2: 表格整个数据源为数组list,要删除第二行,则把第二行数据和第三行数据对应的的排序和姓名先调换,然后再删除当前行数据。就OK啦

直接上代码

  const handleDeleteOrder = (order) => {
        let arr = [...list]
        // 先交换当前行和下一行的等级和图标
        const newArray = arr.map((item, index)=>{
          if(order-1 === index){
            // 交换排序
          let  tempOrder = arr[index].order
          arr[index].order = arr[index+1].order
          arr[index+1].order = tempOrder
            // 交换图像
          let  tempPic = arr[index].pic
          arr[index].pic = arr[index+1].pic
          arr[index+1].pic = tempPic
          }
          return item
        })
        // 再删除当前行数据
        newArray.splice(order - 1, 1)
        setTotalList(newArray)
  }

优缺点:思路较为难想,但实现起来相比思路1代码量可节省一大半。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值