You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何基于动态长度数组获取首尾及中间元素并更新属性

优化后实现代码

// 依赖dayjs处理时间计算
function durationFromData (data) {
  // 边界处理:长度小于2没有计算必要,直接返回
  if (data.length < 2) return data

  // 从第二个元素开始遍历,每轮计算前一个元素的duration
  for (let i = 1; i < data.length; i++) {
    const prevTime = dayjs(data[i-1].loaded_at)
    const currentTime = dayjs(data[i].loaded_at)
    data[i-1].duration = currentTime.diff(prevTime, 'second')
  }

  // 末尾元素duration保持初始值0,符合需求
  return data
}

逻辑说明

  • 完全移除了冗余的长度判断和位置计算逻辑,时间复杂度保持O(n),无额外空间开销
  • 规避了原有代码中索引为0时pos=-1访问数组越界的潜在bug
  • 兼容任意长度≥2的数组,不管是2个、3个还是更多元素都能正常计算

示例运行结果

对你给出的3元素测试数组调用该方法,输出如下:

[
  {
    loaded_at: '2021-07-26 16:31:45',
    duration: 4, // 16:31:49 - 16:31:45 = 4秒
    url: 'https://example.com/1'
  },
  {
    loaded_at: '2021-07-26 16:31:49',
    duration: 38, // 16:32:27 - 16:31:49 = 38秒
    url: 'https://example.com/2'
  },
  {
    loaded_at: '2021-07-26 16:32:27',
    duration: 0, // 末尾元素保持初始值
    url: 'https://example.com/3'
  }
]

内容的提问来源于stack exchange,提问作者Ryan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 14:36:02