我有一个如下的持续时间字符串数组,并希望找到最短时间。
group = ["41:04", "54:50", "01:03:50"] // note this is mix of **mm:ss** and **HH:mm:ss**
我正在使用时刻:
group.map(tid => moment.duration(tid,'hh:mm:ss').asSeconds());
,但它将前两个元素解释为“ hh:mm ”,而不是“ mm:ss ”,结果为:
[147840, 197400, 3830]
但是,第一个元素“ 41:04”是最短的持续时间。
有什么办法可以利用瞬间做到这一点?还是找到最短持续时间的最佳方法是什么?
请注意,如果我自己将零连接到字符串(即 00 :41:04),那将是正确的。
答案 0 :(得分:1)
您可以使用简单的数学方法来计算经过的秒数,而无需使用任何库。 例如;
41:04 = 41 * 60 + 04
01:03:50 = 01 * (60 ^ 2) + 03 * 60 + 50
创建简单的函数来计算seconds elapsed
。
const getSeconds = str => {
const sp = str.split(":");
let sum = 0;
sp.map((d, k) => {
sum += Number(d) * 60 ** (sp.length - 1 - k);
});
return sum;
};
现在,您可以遍历数组以获取秒数。
const min = group.reduce((d, k) => {
const a = getSeconds(d),
b = getSeconds(k);
return a < b ? d : k;
});
作为一个整体,您可以查看下面的代码片段;
const group = ["50:04","41:04", "54:50", "01:03:50"];
const getSeconds = str => {
const sp = str.split(":");
let sum = 0;
sp.map((d, k) => {
sum += Number(d) * 60 ** (sp.length - 1 - k);
});
return sum;
};
const min = group.reduce((d, k) => {
const a = getSeconds(d),
b = getSeconds(k);
return a < b ? d : k;
});
console.log(min);
可能会有更优雅的解决方案。但这就是我想出的。 :D