Задать вопрос
Nikolaanastasiia
@Nikolaanastasiia

Как вычленить максимальные значения из массива объектов?

Например, мне возвращается массив объектов. Как вернуть массив объектов, где останутся только уникальные группы с максимальным значением?

[
{"score": 99,      "group":"1"},
{"score": 90,     "group":"2"},
{"score":"10",      "group":"1"},
{"score":"10",      "group":"2"},
]
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто:

const result = Object.values(arr.reduce((max, n) => (
  max[n.group] = +max[n.group]?.score > +n.score ? max[n.group] : n,
  max
), {}));

Делаем сложно:

function group(data, key, val = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const getVal = val instanceof Function ? val : n => n[val];
  const result = new Map;

  for (const n of data) {
    const k = getKey(n);
    result.set(k, result.get(k) ?? []).get(k).push(getVal(n));
  }

  return result;
}

function max(data, key = n => n) {
  const getVal = key instanceof Function ? key : n => n[key];
  let result = null;

  for (const n of data) {
    const val = getVal(n);
    result = result?.[1] >= val ? result : [ n, val ];
  }

  return result?.[0];
}

const result = Array.from(
  group(arr, 'group').values(),
  n => max(n, m => +m.score)
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы