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 TrajanoArchimedes Trajano
asked Sep 21, 2021 at 4:56
1 Answer 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']));
answered Sep 21, 2021 at 5:02
3 Comments
Ricky Mo
localeCompare
returns a number. Your condition only false when v
and a
are equal.Robby Cornelissen
@RickyMo Thanks, updated. Looks like I need more coffee :)
Archimedes Trajano
@RobbyCornelissen same here. I thought and proven again that sometimes articulating what you want makes the answer come out more naturally.
lang-js
array#reduce
.