Получить максимальное значение для каждого уникального ключа в массиве объектов (Javascript) - PullRequest
0 голосов
/ 07 мая 2020

У меня есть такой массив объектов:

const data = [
    { depth: 0, length: 5 },
    { depth: 1, length: 8 },
    { depth: 1, length: 11 },
    { depth: 1, length: 6 },
    { depth: 1, length: 8 },
    { depth: 1, length: 11 },
    { depth: 1, length: 6 },
    { depth: 1, length: 8 },
    { depth: 2, length: 16 },
    { depth: 2, length: 25 }
];

Мне нужно получить максимальное length значение на depth ключ. Мне нужен массив:

const result = [
    { depth: 0, length: 5 },
    { depth: 1, length: 11 },
    { depth: 2, length: 25 }
];

Массив data может иметь глубину X. Другие примеры, которые я видел, получают только наивысшее значение или один объект с наивысшим значением, тогда как мне нужно наивысшее значение для каждого ключа.

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2020

Уменьшите массив до Map, используя depth в качестве ключа. Если текущий объект не существует на карте или текущий length - это карта меньше, чем length текущего элемента, сохраните элемент для этого depth. Преобразуйте в массив, раздвинув итератор значений карты:

const data = [{"depth":0,"length":5},{"depth":1,"length":8},{"depth":1,"length":11},{"depth":1,"length":6},{"depth":1,"length":8},{"depth":1,"length":11},{"depth":1,"length":6},{"depth":1,"length":8},{"depth":2,"length":16},{"depth":2,"length":25}];

const result = [...data.reduce((r, o) =>
  (!r.has(o.depth) || r.get(o.depth).length < o.length) ? r.set(o.depth, o) : r
, new Map()).values()];

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...