觀察 index.html,可以發現結構上只有一個<ul>
裡面包著無數<li>
並且都有相同的dataset屬性:time
,題目也明確地告訴我們要累加計算全部的影片時間,今天跟昨天一樣算是拿之前所學到的進行組合式應用。
實作開始
<li>
且有data-time
屬性的節點全部選取吧,並因為稍後需要用到其他 Array method,所以我們要解構賦值讓這個NodeList
變成真正的陣列。videoList = [...document.querySelectorAll("li[data-time]")];
data-time
都是分:秒
的字串,因此我們先用String.split()根據:
為切割點將分與秒分開並賦值於minutes
及seconds
變數videoTimes
陣列裝的將是各個影片的總秒數(數字型別)const videoTimes = videoList.map((node) => {
const [minutes, seconds] = node.dataset.time.split(":");
return Number(minutes) * 60 + Number(seconds);
});
0
。const totalSeconds = videoTimes.reduce(
(accumulator, currentValue) => accumulator + currentValue,
0
);
時:分:秒
字串回傳function formatTime(totalSeconds) {
// 小時 = 總秒數除以3600取整數
const hours = Math.floor(totalSeconds / 3600);
// 分鐘 = 總秒數先取除以3600的餘數再除以60取整數
const minutes = Math.floor((totalSeconds % 3600) / 60);
// 秒 = 總秒數除以60的餘數
const seconds = totalSeconds % 60;
return `${hours}:${minutes}:${seconds}`;
}
console.log(formatTime(totalSeconds)); //4:58:58