Группировка объектов по нескольким свойствам и агрегирование значений
В задаче группировки объектов в массиве по нескольким свойствам общим требованием является не только группировать по этим свойствам, но и суммировать значения определенных свойств объекта. Однако решения, которое просто помещает все дубликаты в двумерный массив, недостаточно.
Постановка задачи
Рассмотрим массив объектов, которые необходимо сгруппировать по форме и цвет. Объекты в этом массиве считаются дубликатами, только если их форма и цвет совпадают. Для повторяющихся объектов нам необходимо суммировать значения их используемых и экземпляров и удалить дубликаты, в результате чего получится краткий список объектов с уникальными формами и цветами.
Решение
Чтобы эффективно решить эту проблему, мы можем использовать метод 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