首页 > 其他分享 >后端list在前端实现分页的方法

后端list在前端实现分页的方法

时间:2024-10-09 16:02:28浏览次数:1  
标签:分页 后端 int 代码 list 索引 pagelist3 page lengthsAll

1.后端传来list的数据格式,前端进行分页,在调回方法中reduce方法进行数据分块处理

// 生成卡片数据

       const items = this.listData;
      const chunkedArray = items.reduce((resultArray, item, index) => {
        const chunkIndex = Math.floor(index / 6);
	   if (!resultArray[chunkIndex]) {
          resultArray[chunkIndex] = []; // 创建一个新的数组块
        }

        resultArray[chunkIndex].push(item);

        return resultArray;
      }, []);
      this.cardData = [...chunkedArray]

代码解释(来自ai)

您正在使用 reduce 方法将原始数组 items 分割成多个小数组(称为“块”),每个块包含最多6个元素。以下是代码的具体作用:
const items = this.listData;:这里您将 listData 的值赋给 items 变量,以便在后续操作中使用。
const chunkedArray = items.reduce(...);:这里您使用 reduce 方法来遍历 items 数组,并将元素分组到新的数组中。
在 reduce 方法中,chunkIndex 用于确定当前元素应该放入哪个块中。通过 Math.floor(index / 6) 计算,您可以确保每6个元素放入一个新的块。
如果 resultArray[chunkIndex] 不存在,则创建一个新的数组块。
将当前元素 item 添加到对应的块中。
最后,reduce 方法返回 resultArray,这是包含所有块的数组。
this.cardData = [...chunkedArray];:这里您将处理后的块数组赋值给 cardData,以便在页面上显示。
如果 this.showType 等于 'list',则将 res.result.length 赋值给 this.total,这可能是为了设置列表的总项数。
}).finally(() => { this.loading = false; }):这行代码确保在数据处理完成(无论成功或失败)后,将 loading 状态设置为 false,从而关闭加载动画。}).finally(() => { this.loading = false; }):这行代码确保在数据处理完成(无论成功或失败)后,将 loading 状态设置为 false,从而关闭加载动画。

2.关于后端关于ipage和list的使用
处理大型数据的时候,ipage可以更节省空间和内存,数据足够大的时候ipage性能更好,
list在专为ipage的时候性能变化不大,但是list要加入几个参数,分别是页码,每页容量,以及列表长度
实例:

点击查看代码
long lengthsAll = queryCardPlus().size();
            // 计算起始索引(从0开始)
            int start = (int) ((page.getCurrent() - 1) * page.getSize());
            // 计算结束索引
            int end = (int) Math.min(start + page.getSize(), lengthsAll);
			
            List<SecBusinessSteam> listThree = queryCardPlus().subList(start,end);
            IPage<SecBusinessSteam> pagelist3 = new Page<>();
            pagelist3.setRecords(listThree);
            pagelist3.setTotal(lengthsAll);
            pagelist = pagelist3;
long lengthsAll = queryCardPlus().size(); 这行代码调用了 queryCardPlus() 方法,该方法返回一个 List 类型的集合。然后通过调用 size() 方法获取这个集合的总长度(即所有记录的数量),并将其赋值给 lengthsAll 变量。

int start = (int) ((page.getCurrent() - 1) * page.getSize());

这行代码计算分页查询的起始索引。page.getCurrent() 获取当前页码,page.getSize() 获取每页显示的记录数。由于数组索引是从0开始的,所以需要从当前页码减去1,并且乘以每页的记录数来得到起始索引。

int end = (int) Math.min(start + page.getSize(), lengthsAll);

这行代码计算分页查询的结束索引。它将起始索引加上每页的记录数,但是结果不能超过总记录数 lengthsAll,因此使用 Math.min() 方法来确保结束索引不会超出集合的总长度。

List listThree = queryCardPlus().subList(start, end);

这行代码通过调用 queryCardPlus() 方法获取所有记录的集合,并使用 subList(start, end) 方法来获取从起始索引到结束索引的子列表,这个子列表就是当前页应该显示的记录。

IPage pagelist3 = new Page<>();
这行代码创建了一个新的 IPage 类型的对象 pagelist3,用于封装分页信息和记录列表。

pagelist3.setRecords(listThree);
这行代码将上一步获取的当前页的记录列表设置到 pagelist3 对象的 records 属性中。

pagelist3.setTotal(lengthsAll);
这行代码将总记录数设置到 pagelist3 对象的 total 属性中,这样分页对象就包含了总记录数信息。

pagelist = pagelist3;
最后,将 pagelist3 对象赋值给 pagelist 变量,这样 pagelist 就包含了当前页的记录和分页信息,可以用于后续的操作或返回给前端进行显示。

标签:分页,后端,int,代码,list,索引,pagelist3,page,lengthsAll
From: https://www.cnblogs.com/zhanpengwu/p/18454465

相关文章