0

Similar to How to sort strings in JavaScript but I want to avoid sorting first, I just want the "largest" value of a string. For example

f(['Aa', 'B', 'C', 'Acd', 'Ace']) == 'C'

I am thinking it's something with .reduce like

const f = (a) => a.reduce(someFunctionGoesHere)

Where some function has an undefined check

UPDATE: Got it working but looks fugly. I wonder if I can reduce that function

const someFunctionGoesHere = (prev, current) => {
  if (!prev) {
    return current;
  }
  else if (prev.localeCompare(current) < 0) {
    return current;
  } else {
    return prev;
  }
};
const f = (a) => a.reduce(someFunctionGoesHere)

console.log(f(['Aa', 'B', 'C', 'Acd', 'Ace','CC']));

UPDATE: this works, one line, but looks quite ugly. I guess this is the best that can be done with Javascript itself.

const maxString = (a) => a.reduce((prev, current) => (!prev || prev.localeCompare(current) < 0) ? current : prev)

console.log(maxString(['Aa', 'B', 'C', 'Acd', 'Ace','CC']));
Archimedes Trajano
  • 35,625
  • 19
  • 175
  • 265

1 Answers1

1

Indeed, reduce() will get you there:

const f = (array) => array.reduce((a, v) => v.localeCompare(a) > 0 ? v : a, '');

console.log(f(['Aa', 'B', 'C', 'Acd', 'Ace','CC']));
Robby Cornelissen
  • 91,784
  • 22
  • 134
  • 156