如何用JavaScript将对象数组中dddd hh:min格式时间转为分钟并返回数组
时间格式转总分钟数的实现方案
问题说明
现有一个对象数组,其中time属性格式为dddd hh:min(dddd为4位天数、hh为2位小时、min为2位分钟),需要将该属性转换为总分钟数并返回新的对象数组。用户尝试的代码返回结果不符合预期,以下是修正方案和更优实现。
原代码问题分析
- 字符串未转数字:
splitMin直接使用了字符串值,导致计算时变成字符串拼接而非数值相加,比如1440 + 180 + '40'会得到"162040"而非正确的1660 - 未构建目标数组:循环仅打印结果,没有生成包含转换后对象的新数组
- 不必要的
this调用:全局环境下直接调用convertToMinutes即可,无需this
修正后的代码
var arrobj=[ {id:1, time: '0001 03:40'}, {id:2, time: '0016 10:20'}, {id:3, time: '1014 12:04'}, {id:4, time: '0412 01:01'}, ] function convertToMinutes(value) { var splitTime = value.split(' '); // 天数转分钟,自动转数字 var dayToMinutes = splitTime[0] * 1440; var splitHrMin = splitTime[1].split(':'); // 小时转分钟 var splitHr = splitHrMin[0] * 60; // 分钟转数字 var splitMin = Number(splitHrMin[1]); var timeInMinutes = dayToMinutes + splitHr + splitMin; // 转成字符串返回,匹配期望输出格式 return String(timeInMinutes); } // 构建新数组 var resultArr = []; for(let item of arrobj) { resultArr.push({ id: item.id, time: convertToMinutes(item.time) }); } console.log(resultArr);
更优实现(使用数组map方法)
利用Array.prototype.map可以更简洁地生成新数组,同时结合解构和正则提取数据:
const arrobj = [ {id:1, time: '0001 03:40'}, {id:2, time: '0016 10:20'}, {id:3, time: '1014 12:04'}, {id:4, time: '0412 01:01'}, ]; const convertArr = arrobj.map(item => { // 正则匹配天数、小时、分钟 const [, days, hours, mins] = item.time.match(/(\d{4}) (\d{2}):(\d{2})/); const totalMins = days * 1440 + hours * 60 + Number(mins); return { ...item, time: String(totalMins) }; }); console.log(convertArr);
输出结果
运行上述代码后,将得到符合预期的输出:
[ {id:1, time: '1660'}, {id:2, time: '23660'}, {id:3, time: '1460884'}, {id:4, time: '593341'}, ]
内容的提问来源于stack exchange,提问作者miasen
相关产品推荐
相关产品推荐

