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
相关产品推荐
相关产品推荐

