Иногда в каждый день программирования вы получаете массив объектов, которые не являются уникальными 😰.
У вас есть массив объектов, некоторые из которых являются дубликатами, но с разными свойствами объекта, и вы хотите получить только один объект со всеми те свойства.
In JavaScript
:
- Объекты используются для хранения коллекций с ключами.
- Массивы используются для хранения упорядоченных коллекций.
Давайте посмотрим на настоящую проблему с кодом:
[
{
label: "Book1",
data: "US edition"
},
{
label: "Book1",
title: "UK edition"
},
{
label: "Book1",
date: "12.2.2020"
},
{
label: "Book2",
data: "CAN edition"
},
{
label: "Book2",
title: "test edition"
}
];
Вы хотите видеть такие данные:
[
{
label: "Book1",
data: "US edition",
title: "UK edition",
date: "12.2.2020",
etc: "etc..."
},
{
label: "Book2",
data: "CAN edition",
title: "test edition"
}
];
Во-первых, давайте посмотрим, какую структуру данных мы можем использовать, чтобы помочь нам в реализации этого подхода, например мы можем использовать Map 🤩.
Карта - это набор элементов данных с ключами, как и Object
. Но главное отличие в том, что Map
позволяет использовать ключи любого типа.
Если свойство вашего объекта любого типа, оно будет работать с Map: D.
Во-первых, подумайте о создании интерфейса для вашего объекта:
class: IBook { label: string; data: string; title: string; date: Date; etc: Etc; }
Функция javascript будет такой:
Мы просто перебираем каждый элемент исходного массива и проверяем, есть ли у нас уже пары ключ-значение внутри Map, и добавляем к существующей паре, если не создали новую с предоставленными значениями.
Функция будет работать с любым типом объекта в массиве.
Вызвать эту функцию очень просто:
mergeObjectsInUnique(myArrayWithDuplicates, 'propertyThatIWantToGroupBy');
Надеюсь, вам понравится, похлопайте за то, что сделали его видимым для более широкой аудитории 🥳 и помогите распространить информацию 😎.