1
2
3
4
5
6
7
8
9
|
<li data-time="5:43">
Video 1
</li>
<li data-time="2:33">
Video 2
</li>
<li data-time="3:45">
Video 3
</li>
|
cs |
video list의 data-time에 있는 시간들을 가져와서 총 시간을 구하기
내가 적은 코드
1
2
3
4
5
6
7
8
9
10
11
|
const videos = document.querySelectorAll("li");
const videoTimes = Array.from(videos).reduce((total, video) => {
const time = video.dataset.time;
const splitTime = time.split(':');
const min = Number(splitTime[0]);
const sec = Number(splitTime[1]);
return total += (min * 60) + sec;
}, 0);
console.log(`Total time of these video is ${parseInt(videoTimes / 60)} min ${videoTimes % 60}sec`);
|
cs |
- list들을 가져와서 reduce를 한번씩만 돌림.
- reduce안에서 data-time을 가져오고
- 3:20 => 3 20 으로 분리해 숫자형식으로 만들어서
- 모든 비디오의 시간을 초로 계산해 더하도록 만들었다.
영상의 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
const timeNodes = Array.from(document.querySelectorAll('[data-time]'));
const seconds = timeNodes
.map(node => node.dataset.time)
.map(timeCode => {
const [mins, secs] = timeCode.split(':').map(parseFloat);
return (mins * 60) + secs;
})
.reduce((total, vidSeconds) => total + vidSeconds);
let secondsLeft = seconds;
const hours = Math.floor(secondsLeft / 3600);
secondsLeft = secondsLeft % 3600;
const mins = Math.floor(secondsLeft / 60);
secondsLeft = secondsLeft % 60;
console.log(`total : ${hours}hour ${mins}min ${secondsLeft}sec`)
|
cs |
- timeNodes를 가져올 때 data-time이 있는 list만 가져옴
- map을 통해 새로운 array를 만들어가며 시간을 구함
- reduce에서는 vidSeconds를 더해주기만함
- 시/분/초를 구할 때 굳이 다시 곱해서 빼주는 과정을 거치지 않고 나머지를 통해 secondsLeft를 구함
새롭게 알게된 것
- 굳이 하나의 함수에서 모든 일을 처리하려고 하지 않아도 된다. 순차적으로 하는 것이 더 이해하기 쉬워보임
- array를 만들어 하나씩 사용하고 싶은 경우, 따로 선언하지 않아도 된다.
1
2
3
4
5
6
|
const splitTime = timeCode.split(':');
const mins = splitTime[0];
const secs = splitTime[1];
// 한 줄로 줄여서 쓸 수 있다.
const [mins, secs] = timeCode.split(':');
|
cs |
- map에서 아래의 두 코드는 같다.
1
2
3
4
|
array.map(item => parseFloat(item);
// 위와 같다
array.map(parseFloat);
|
cs |
- 코드는 간결하게 쓰는 것이 좋은데 생각보다 쉽지 않다. 한 눈에 보기 쉽게 작성하도록 노력해야겠다.
'Javascript' 카테고리의 다른 글
Javascript30 - day22 : Follow Along Links (0) | 2021.04.23 |
---|---|
Javascript30 - day21 Geolocation based Speedometer and Compass (0) | 2021.04.22 |
Javascript30 - day20 : Speech Recognition (0) | 2021.04.21 |
Javascript30 - day19 Webcam Fun (0) | 2021.04.20 |
Javascript30 - day17 : Sorting Band Names without articles (0) | 2021.04.16 |