我需要从 API 端点检索最多 N 个元素,但该端点是分页的,没有选项来配置每页获取的项目数。元素是 json 对象。
显而易见的解决方案是这样的:
let page = 1
let totalAmount = 0
let elements = []
while (totalAmount < N) {
const pageElements = apiService.getElements(page)
elements.push(...pageElements)
totalAmount += pageElements.length
page += 1
//code for the case when N is bigger than all the elements in the API
}
elements = elements.slice(0, N)
但是当 N 很大时,这可能效率太低,因为 slice 在内存中复制了数组。
所以,我正在做的是,在 while 循环内,检查我是否在最后一次迭代中,如果是,我只切片该页面:
if (totalAmount + pageElements.length > N) {
pageElements= pageElements.slice(0, N - totalAmount)
}
有没有办法让它更有效?第二种解决方案可能足够有效,但我确实需要使其尽可能好。
无需复制,可以就地改变数组的长度。
if (totalAmount + pageElements.length > N) {
pageElements.length = N - totalAmount
}