This thing apparently reduces something like HH:mm:ss
or HH:mm
to number of seconds.
var sec = 1;
var min = 60*sec;
var hour = 60*min;
function parseTime(time){
var splits = time.split(":");
time = (splits[0]*hour) + (splits[1]*min);
if (splits[2]) time += splits[2]*sec;
return parseInt(time, 10);
}
Okay, let's go! First, let's indent it properly and convert it to an arrow function.
const sec = 1;
const min = 60*sec;
const hour = 60*min;
const parseTime = time => {
var splits = time.split(":");
time = (splits[0]*hour) + (splits[1]*min);
if (splits[2]) time += splits[2]*sec;
return parseInt(time, 10);
}
Now, use const
instead of var
and avoid param reassigning
const sec = 1;
const min = 60*sec;
const hour = 60*min;
const parseTime = time => {
const splits = time.split(":");
const timeSeconds = (splits[0]*hour) + (splits[1]*min);
if (splits[2]) timeSeconds += splits[2]*sec;
return parseInt(timeSeconds, 10);
}
Instead of multiplying by variables, we can instead have an array of multiplying values, and reduce
the values
const mults = [60*60, 60, 1];
const parseTime = time => {
const splits = time
.split(":")
.reduce((acc, el, i) => acc + (el * mults[i] || 0), 0);
return parseInt(splits, 10);
}
Now we can just return
directly.
const mults = [60*60, 60, 1];
const parseTime = time => {
return time
.split(":")
.reduce((acc, el, i) => acc + (el * mults[i] || 0), 0);
};
Okay, maybe we don't really need the array...
-const mults = [60*60, 60, 1];
const parseTime = time => {
return time
.split(":")
+ .reverse()
- .reduce((acc, el, i) => acc + (el * mults[i] || 0), 0);
+ .reduce((acc, el, i) => acc + (el * 60 ** i || 0), 0);
};
... or the return
const parseTime = time =>
time
.split(":")
.reverse()
.reduce((acc, el, i) => acc + (el * 60 ** i || 0), 0);
Finally, if you don't like newline
...
const parseTime = time =>
time.split(":").reverse().reduce((acc, el, i) => acc + (el * 60 ** i || 0), 0);
Okay, maybe I went too far... 🤔