You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用switch语句基于数组生成自定义时间格式化字符串?

解决自定义时间格式化(基于数组输入)的问题

首先得指出你现有代码里的几个关键问题:

  • 你的函数formatTime里用了time.split(':'),但传入的参数是数组(比如['00','00','10']),数组并没有split方法,这会直接抛出错误;
  • 你对switch的用法有误:switch是基于**严格相等(===)**匹配表达式和case值的,你把数组作为switch的表达式,case却是布尔值(比如hour > 0),这种情况下永远不可能匹配成功;
  • 输出格式和你的预期有差异(比如你要10sec,但原代码会返回10 sec,多了空格)。

方案一:更直观的if判断实现(推荐)

这种写法逻辑清晰,容易维护,完全满足你的需求:

// 测试用例
let displaySumTimes = ['00', '00', '10'];
let displaySumTimes1 = ['00', '10', '10'];
let displaySumTimes2 = ['01', '05', '30'];
let displaySumTimes3 = ['00', '00', '00'];

const formatTime = (timeArr) => {
  // 将数组中的字符串转成数字,方便判断是否非零
  const [hourStr, minuteStr, secStr] = timeArr;
  const hour = parseInt(hourStr, 10);
  const minute = parseInt(minuteStr, 10);
  const sec = parseInt(secStr, 10);

  // 收集需要显示的时间片段
  const timeParts = [];

  if (hour > 0) {
    timeParts.push(`${hour}h`);
  }
  if (minute > 0) {
    timeParts.push(`${minute}min`);
  }
  // 如果前面没有非零项,即使秒为0也显示(可根据需求调整)
  if (sec > 0 || timeParts.length === 0) {
    timeParts.push(`${sec}sec`);
  }

  // 拼接成最终字符串
  return timeParts.join(' ');
};

console.log(formatTime(displaySumTimes));   // 输出: 10sec
console.log(formatTime(displaySumTimes1));  // 输出: 10min 10sec
console.log(formatTime(displaySumTimes2));  // 输出: 1h 5min 30sec
console.log(formatTime(displaySumTimes3));  // 输出: 0sec

方案二:满足你要求的switch实现

如果你坚持要用switch,可以通过将switch表达式设为true,让case匹配布尔条件的方式实现(虽然这种写法不是switch的典型用法,但能满足你的需求):

const formatTimeWithSwitch = (timeArr) => {
  const [hourStr, minuteStr, secStr] = timeArr;
  const hour = parseInt(hourStr, 10);
  const minute = parseInt(minuteStr, 10);
  const sec = parseInt(secStr, 10);

  switch (true) {
    // 小时非零的情况,按需拼接分钟和秒
    case hour > 0:
      return `${hour}h ${minute > 0 ? `${minute}min ` : ''}${sec}sec`.trim();
    // 小时为零但分钟非零的情况
    case minute > 0:
      return `${minute}min ${sec}sec`;
    // 其他情况(小时和分钟都为零)
    default:
      return `${sec}sec`;
  }
};

console.log(formatTimeWithSwitch(displaySumTimes));  // 输出: 10sec
console.log(formatTimeWithSwitch(displaySumTimes1)); // 输出: 10min 10sec

关键逻辑说明

  1. 先将数组中的字符串时间转成数字,避免字符串比较的问题(比如'00'转成0,方便判断是否非零);
  2. 只保留非零的时间单位,按小时→分钟→秒的优先级拼接;
  3. 处理了全零的边界情况(可以根据你的需求调整成空字符串或其他显示)。

内容的提问来源于stack exchange,提问作者Umbro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:08:46