3 回答

TA貢獻1982條經驗 獲得超2個贊
您需要在 reduce 之后添加零,因為 reduce 仍在計算時間。
我.map
在計算后添加了一個以獲取每個時間值,然后檢查值是否小于 10:
.map((v) => (v < 10) ? v = "0" + v : v)
let testOne = ["02:00:00", "01:00:00", "01:00:00"]
function test() {
? let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {
? ? arr[0] += parseFloat(item[0]);
? ? arr[1] += parseFloat(item[1]);
? ? arr[2] += parseFloat(item[2]);
? ? if (arr[2] >= 60) {
? ? ? arr[1]++;
? ? ? arr[2] %= 60;
? ? }
? ? if (arr[1] >= 60) {
? ? ? arr[0]++;
? ? ? arr[1] %= 60;
? ? }
? ? return arr;
? }, [0, 0, 0]).map((v) => (v < 10) ? v = "0" + v : v).join(':')
? console.log(calTotalHours)
}
test()

TA貢獻1842條經驗 獲得超21個贊
你可以做這樣的事情來獲得你想要的padStart()功能
let testOne = ["02:00:00", "01:00:00", "01:00:00"]
function test() {
let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {
arr[0] += parseFloat(item[0]);
arr[1] += parseFloat(item[1]);
arr[2] += parseFloat(item[2]);
if (arr[2] >= 60) {
arr[1]++;
arr[2] %= 60;
}
if (arr[1] >= 60) {
arr[0]++;
arr[1] %= 60;
}
return arr;
}, [0, 0, 0])
.map((num) => num.toString().padStart(2, 0)) //add 0 to each value here if they are less than 10
.join(':');
console.log(calTotalHours);
}
test();

TA貢獻1790條經驗 獲得超9個贊
您可以在加入陣列之前嘗試使用 .padStart() on:
.map(num => num.toString().padStart(2, '0'))
這將填充長度小于 2 的前導 0
添加回答
舉報