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;
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
这行代码通过调用 queryCardPlus() 方法获取所有记录的集合,并使用 subList(start, end) 方法来获取从起始索引到结束索引的子列表,这个子列表就是当前页应该显示的记录。
IPage
这行代码创建了一个新的 IPage
pagelist3.setRecords(listThree);
这行代码将上一步获取的当前页的记录列表设置到 pagelist3 对象的 records 属性中。
pagelist3.setTotal(lengthsAll);
这行代码将总记录数设置到 pagelist3 对象的 total 属性中,这样分页对象就包含了总记录数信息。
pagelist = pagelist3;
最后,将 pagelist3 对象赋值给 pagelist 变量,这样 pagelist 就包含了当前页的记录和分页信息,可以用于后续的操作或返回给前端进行显示。