我想使用传递数组的switch语句显示日期。数组let displaySumTimes = ['00', '00', '10']
-输出:10秒
let displaySumTimes = ['00', '00', '10'];
const formatTime = (time) => {
const [hour, minute, sec] = time.split(':');
console.log([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
答案 0 :(得分:4)
您的切换语法似乎不正确。您并没有在这里进行破坏,而是在新数组上进行了切换(您将在条件数组中创建该数组)。为什么不简单地将案件重构为ifs?
此外,您在数组上使用字符串方法(split
)。我在您的代码中看不到任何带有“:”的字符串。如果您要使用一个看起来像['##', '##', '##']
的数组,则可以使用如下ifs:
if (hour !== "00") return `${hour} h ${minute} min ${sec} sec`;
if (minute !== "00") return `${minute} min ${sec} sec`;
return `${sec} sec`;
答案 1 :(得分:2)
也许您可以采用一种实用的方法来避免使用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.log(formatTime(displaySumTimes)); //output 10sec
console.log(formatTime(displaySumTimes1)); //output 10min 10 sec
答案 2 :(得分:-1)
有趣...
在您的功能开关中,每种情况下(小时> 0,分钟> 0和分钟<1)将数组[hour,minutes,sec]上的引用与布尔值进行比较。它不起作用...