Вы можете взять Map
для группировки по первому элементу и получить максимальные значения путем проверки сохраненных значений.
var array = [['a', 1], ['a', 2], ['a', 3], ['b', 2], ['b', 5]],
result = Array.from(
array.reduce((m, [k, v]) => m.set(k, m.has(k) ? Math.max(v, m.get(k)) : v), new Map)
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Если вы хотите сохранить исходные массивы, вы можете сохранить массив вместо значения и позже принимать только значения карты.
var array = [['a', 1], ['a', 2], ['a', 3, 'bar'], ['b', 2], ['b', 5, 'foo']],
result = Array.from(array
.reduce(
(m, a) => m.has(a[0]) && m.get(a[0])[1] > a[1] ? m : m.set(a[0], a),
new Map
)
.values()
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }