查找最短持续时间

问题描述 投票:0回答:1

我有一个如下所示的持续时间字符串数组,并希望找到最短时间。

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),那将是正确的。

javascript time momentjs duration
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.