Найти минимальную продолжительность времени - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть массив строк продолжительности времени, как показано ниже, и я хотел бы найти минимальное время.

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()); 

, но он интерпретирует первые два элемента как " чч: мм " вместо " мм:ss", и приводит к:

[147840, 197400, 3830]

Однако первый элемент" 41:04 "- это кратчайшая продолжительность.

Есть ли способ сделать это правильно, используя момент?Или как лучше найти минимальную продолжительность?

Обратите внимание, что если я сам соединю нули со строкой (т. Е. 00 : 41: 04), это будет правильно.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы можете рассчитать количество прошедших секунд, используя простую математику, без использования каких-либо библиотек.Например;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...