在 Javascript 中切片大型串联数组的最有效方法?

问题描述 投票:0回答:1

我需要从 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)
}

有没有办法让它更有效?第二种解决方案可能足够有效,但我确实需要使其尽可能好。

javascript
1个回答
0
投票

无需复制,可以就地改变数组的长度。

if (totalAmount + pageElements.length > N) {
  pageElements.length = N - totalAmount
}
© www.soinside.com 2019 - 2024. All rights reserved.