«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как группировать объекты по нескольким свойствам и агрегировать значения в JavaScript?

Как группировать объекты по нескольким свойствам и агрегировать значения в JavaScript?

Опубликовано 25 декабря 2024 г.
Просматривать:640

How to Group Objects by Multiple Properties and Aggregate Values in JavaScript?

Группировка объектов по нескольким свойствам и агрегирование значений

В задаче группировки объектов в массиве по нескольким свойствам общим требованием является не только группировать по этим свойствам, но и суммировать значения определенных свойств объекта. Однако решения, которое просто помещает все дубликаты в двумерный массив, недостаточно.

Постановка задачи

Рассмотрим массив объектов, которые необходимо сгруппировать по форме и цвет. Объекты в этом массиве считаются дубликатами, только если их форма и цвет совпадают. Для повторяющихся объектов нам необходимо суммировать значения их используемых и экземпляров и удалить дубликаты, в результате чего получится краткий список объектов с уникальными формами и цветами.

Решение

Чтобы эффективно решить эту проблему, мы можем использовать метод Array#reduce в сочетании со вспомогательным объектом, который отслеживает встречающиеся комбинации форм и цветов:

const arr = [
  { shape: 'square', color: 'red', used: 1, instances: 1 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
  { shape: 'circle', color: 'blue', used: 0, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 4 },
  { shape: 'circle', color: 'red', used: 1, instances: 1 },
  { shape: 'circle', color: 'red', used: 1, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 5 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
];

const helper = {};
const result = arr.reduce((r, o) => {
  const key = `${o.shape}-${o.color}`;

  if (!helper[key]) {
    // If it's a unique combination, add to the helper and result array
    helper[key] = Object.assign({}, o);
    r.push(helper[key]);
  } else {
    // If it's a duplicate, update the values in the helper
    helper[key].used  = o.used;
    helper[key].instances  = o.instances;
  }

  return r;
}, []);

console.log(result);

Вывод:

[
  { shape: "square", color: "red", used: 5, instances: 3 },
  { shape: "circle", color: "red", used: 2, instances: 1 },
  { shape: "square", color: "blue", used: 11, instances: 9 },
  { shape: "circle", color: "blue", used: 0, instances: 0 }
]

Это решение эффективно группирует объекты по форме и цвету, объединяет используемые значения и значения экземпляров для повторяющихся объектов, а также удаляет все оставшиеся дубликаты, что приводит к желаемому результату.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3