我有一个如下所示的持续时间字符串数组,并希望找到最短时间。
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),那将是正确的。
您可以使用简单的数学计算经过的秒数,而无需使用任何库。例如;
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