DEV Community

Discussion on: Refactoring the Worst Code I’ve Ever Written

Collapse
 
jnschrag profile image
Jacque Schrag

Maybe I'm missing the point of your comment, but if you have recommendations for how to refactor that snippet, I'd honestly love to hear them! I did consider creating a dataset object first with the type & years predefined (like I created in Option 1) and setting that to the initial accumulator value, but this seemed cleaner to me. Would love to know if you had other thoughts!

Collapse
 
dimpiax profile image
Dmytro Pylypenko

Hello, didn't read the whole legacy code.
But this block of code took my attention, in concrete: useless write and duplicated reads.

I see better construction of it is:

const dataSet = data.reduce((acc, cur) => {
  const { type, year } = cur;

  if (acc[type] == null) acc[type] = {};
  if (acc[type][year] == null) acc[type][year] = [];

  acc[type][year].push(cur);
  return acc;
}, {});
Thread Thread
 
jnschrag profile image
Jacque Schrag

Thanks for sharing! Just goes to show that there's a lot of different ways to solve the same problem.

Thread Thread
 
dimpiax profile image
Dmytro Pylypenko

@Jacque, it's way of not doing useless writing each time, but only in case when it needs.

Thread Thread
 
jnschrag profile image
Jacque Schrag

Yep, I read it and can see what it does, thanks.

Thread Thread
 
fardarter profile image
sauln

Yeah, Dmytro it's terser. It's really not among the more interesting comments you could make though given the optimisations actually available above.

Maybe consider when commenting on the internet about how crap someone's code is that yours is still very ...naive.

Thread Thread
 
dimpiax profile image
Dmytro Pylypenko

sauln, if take your comment seriously, not easy without smile, but anyway,
about "naive" – what do you mean from technical point of view?
Propose your variant, and highlight weak(or naive) sides of my example,
if you will be right with your proposition – I will agree with better solution with real advantages.