我需要从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会在内存中复制array.

所以,我正在做的是,在while循环中,判断我是否处于最后一次迭代中,如果是,我只切片该页面:

if (totalAmount + pageElements.length > N) {
  pageElements= pageElements.slice(0, N - totalAmount)
}

有没有方法可以让这变得更有效?第二种解决方案可能足够有效,但我确实需要让它尽可能好.

推荐答案

无需复制,即可就地更改数组的长度.

if (totalAmount + pageElements.length > N) {
  pageElements.length = N - totalAmount
}

Javascript相关问答推荐

将音频记录从js发送到activx-web服务器以保存到磁盘

想要检测字符串中的所有单词

无法在page. evalve()内部使用外部函数

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

在JavaScript中检索一些文本

如何提取Cypress中文本

获取表格的左滚动位置

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

仅圆角的甜甜圈图表

类型脚本中只有字符串或数字键而不是符号键的对象

分层树视图

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

确保函数签名中的类型安全:匹配值

扩展类型的联合被解析为基类型

让chart.js饼图中的一个切片变厚?

无法读取未定义的属性(正在读取合并)-react RTK

Pevent触发material 用户界面数据网格中的自动保存

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为