背景
今天我们轻松一点,动一动脑筋做一条代码题,题干很简单 计算给出数组中的字符的平均时间,里面的字符串时间是24小时制的,我们获取N个时间来获取一个平均值,时间精确到分钟,秒数自动去掉即可。
const arr = ["8:15", "6:35", "11:22"]
思路分析
- 首先我们想要获取平均值,在我们现有的字符串中,我们首先得将字符串转化为可以进行数值统计的真实时间,我们不能以小时作为统计单位,需要找最小的数值单位用作统计,所以第一步的目的很明确了,需要将字符串转化为单位为分钟的统计数字。
// 获取时间的平均值
const totalMinutes = arr.reduce((pre, cur) => {
const [h, m] = cur.split(':');
return pre + Number(h) * 60 + Number(m)
}, 0);
- 第二步,我们需要求分钟的平均数,在N个时间中,获取平均的值,以分钟作为单位。
// 总分钟数除以时间数量,得到平均分钟值
const totalP = totalMinutes / arr.length
- 第三步,我们在这里其实按部就班地进行数值处理即可,既然已经拿到了平均的总时间单位了,只需要接下来处理好小时和分钟的关系即可
// 将平均分钟值,转换成时分
const hours = Math.floor(totalP / 60) // 取整,小时
const minutes = totalP % 60 // 取余,分钟
// 修改分钟数的格式
const fm = minutes < 10 ? `0${minutes}` : minutes
- 最后拼接数据,输出最后的结果
// 拼接最后结果
const averageTime = `${hours}:${fm}`;
console.log(averageTime); // 输出
答案
// 获取时间的平均值
const totalMinutes = arr.reduce((pre, cur) => {
const [h, m] = cur.split(':');
return pre + Number(h) * 60 + Number(m)
}, 0)
// 总分钟数除以时间数量,得到平均分钟值
const totalP = totalMinutes / arr.length
// 将平均分钟值,转换成时分
const hours = Math.floor(totalP / 60) // 取整,小时
const minutes = totalP % 60 // 取余,分钟
// 修改分钟数的格式
const fm = minutes < 10 ? `0${minutes}` : minutes
// 拼接最后结果
const averageTime = `${hours}:${fm}`;
console.log(averageTime); // 输出 "8:44"
总结
这一题看似简单,实际是可以考察到面试者的 es6 语法使用方面是否灵活,其次是解题的思路是否清晰,对时间的单位处理是否清晰,这样点在日常的开发中是我们经常都会碰到的问题,如何格式化时间等等。今天的题目就到这里,希望可以拓宽大家的思路,对大家有帮助。如果帮助到你的话,麻烦你给我一个点赞,收藏,这对我继续创作是很大的动力和帮助,谢谢大家,同时也欢迎大家互相交流学习