Я хочу сгенерировать пользовательскую строку в формате времени с помощью оператора switch, в котором информация о дате передается в виде массива.
Для такого массива:
let displaySumTimes = ['00', '00', '10']
ожидаемый результат будет:
10sec
Если значение в массиве больше нуля, оно должно быть включено в отформатированную строку, возвращаемую моим оператором switch. Каждое ненулевое значение в результате также должно иметь соответствующую единицу времени, включенную в результат отформатированной строки.
Мой текущий код выглядит так:
let displaySumTimes = ['00', '00', '10'];
const formatTime = (time) => {
const [hour, minute, sec] = time.split(':');
console.info([hour, minute, sec]);
switch([hour, minute, sec]) {
case hour > 0:
return `${hour} h ${minute} min ${sec} sec`;
break;
case minute > 0:
return `${minute} min ${sec} sec`;
break;
case minute < 1:
return `${sec} sec`;
default:
// code block
}
}
formatTime(displaySumTimes); //output 10sec
let displaySumTimes1 = ['00', '10', '10'];
formatTime(displaySumTimes1); //output 10min 10 sec



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, вы могли бы применить к этому функциональный подход, который позволил бы избежать необходимости в операторе switch.
Например, вы можете динамически создать список, содержащий каждую часть результата форматированной строки (который строится на основе входных значений), а затем join() этот список пробельных символов для составления строки с требуемым форматом:
const formatTime = (time) => {
const [h, m, s] = time;
/* Dynamically build a temporary list containing each part of the formatted time depending
on input values supplied*/
return [].concat(
h > 0 ? [`${ h }hr`] : [],
m > 0 ? [`${ m }min`] : [],
s > 0 ? [`${ s }sec`] : [])
/* Join each part of the formatted time with a whitespace to achieve required formatting */
.join(' ');
}
let displaySumTimes = ['00', '00', '10'];
let displaySumTimes1 = ['00', '10', '10'];
console.info(formatTime(displaySumTimes)); //output 10sec
console.info(formatTime(displaySumTimes1)); //output 10min 10 secПохоже, ваш синтаксис переключателя неверен. Вы не разрушаете там, вы переключаетесь на новый массив (который вы создаете там в условном выражении). Почему бы просто не преобразовать ваши кейсы в «если»?
Кроме того, вы используете строковый метод (split) для массива. Я не вижу строк с ":" в вашем коде. Если вы собираетесь использовать массив, который, как вы знаете, будет выглядеть так ['##', '##', '##'], вы можете использовать такие ifs:
if (hour !== "00") return `${hour} h ${minute} min ${sec} sec`;
if (minute !== "00") return `${minute} min ${sec} sec`;
return `${sec} sec`;
Вам не нужно больше там. Если сработает первый оператор if, он вернется и никогда не сработает со вторым.