JavaScript中如何将时间戳转秒函数应用于嵌套数组并保留结构
步骤1:修正时间转秒的转换函数
你原有convertor存在逻辑错误,会导致计算结果不符合预期:
- 小时位应该乘以
3600(60分钟*60秒),不是60 parseInt包裹位置错误,且直接对小数位执行parseInt会丢失毫秒精度- 多余的减1.2操作也会导致结果偏差
修正后的函数:
const convertor = (timeStr) => { const [hours, minutes, seconds] = timeStr.split(':').map(Number); return hours * 3600 + minutes * 60 + seconds; }; // 测试:输入'00:01:02.330' 输出 62.33,符合要求
注意:原数组中的时间值需要用引号包裹为字符串格式,否则会被JS识别为非法数字抛出语法错误。
步骤2:递归处理任意深度的嵌套数组
要完全保留原数组嵌套结构,编写递归遍历函数即可:
// 原嵌套数组(已补充字符串引号) const nestedArray = [[['00:01:02.330'],['00:01:04.550'],['01:11:02.330']],[['00:01:02.330'],['00:01:02.330']],[['00:01:02.330'],['00:01:02.330'],['00:01:02.330']]]; // 递归转换函数 const convertNestedArray = (arr) => { return arr.map(item => { // 当前项为数组则继续递归 if (Array.isArray(item)) { return convertNestedArray(item); } // 非数组项直接调用转换函数 return convertor(item); }); }; const result = convertNestedArray(nestedArray); console.log(result);
也可以用简化的一行箭头函数实现:
const convertNested = arr => arr.map(i => Array.isArray(i) ? convertNested(i) : convertor(i)); const result = convertNested(nestedArray);
输出结果示例
处理后完全保留原嵌套结构,结果如下:
[ [ [ 62.33 ], [ 64.55 ], [ 4262.33 ] ], [ [ 62.33 ], [ 62.33 ] ], [ [ 62.33 ], [ 62.33 ], [ 62.33 ] ] ]
内容的提问来源于stack exchange,提问作者moemous
相关产品推荐
相关产品推荐

