Skip to content

Instantly share code, notes, and snippets.

@zettca
Last active February 18, 2020 00:44
Show Gist options
  • Save zettca/757fcf944b3809cdcbcc9ce533350882 to your computer and use it in GitHub Desktop.
Save zettca/757fcf944b3809cdcbcc9ce533350882 to your computer and use it in GitHub Desktop.
Modernizing an old JavaScript script

Modernizing an old JavaScript script

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... 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment