Мне нужна карта, где ключи являются уникальными идентификаторами, а значением будет массив объектов, соответствующих уникальному идентификатору. Пример данных
const exampleData = [
{id: 1,
name: "Tony",
},
{id: 2,
name: "Lori"
},
{id: 2,
name: "Pete"
},
{id: 2,
name: "Brandon"
},
];
Это то, что я пробовал
let map = new Map();
filteredArray.map(array => {
map.set(array.assessmentId, [...map.get(array.assessmentId), array]);
});
Результат, который я хочу:
Map (
[key: 1,
value: [id: 1, Name: Tony],
],
[key:2,
value:[id: 2, Name: Lori],[id: 2, Name: Pete], [id: 2, Name: Brandon]
])
Желаемый результат не является Javascript Map
.
@connexo Я думал, что буду использовать карту, аналогичную тому, как мы используем HashTable, чтобы проверить, существует ли уже идентификатор, и добавить к нему. Если нет, я бы добавил новый идентификатор.
Если вы хотите сгруппировать данные, вы можете уменьшить количество элементов и объединить каждый элемент в массив, ключ которого определяется свойством id
.
const data = [
{ id: 1, name: "Tony", },
{ id: 2, name: "Lori" },
{ id: 2, name: "Pete" },
{ id: 2, name: "Brandon" },
];
const grouped = new Map(Object.entries(data.reduce((result, item) => ({
...result,
[item.id]: [ ...(result[item.id] || []), item ]
}), {})));
console.info(...grouped);
.as-console-wrapper { top: 0; max-height: 100% !important; }
{
"1": [
{ "id": 1, "name": "Tony" }
],
"2": [
{ "id": 2, "name": "Lori" },
{ "id": 2, "name": "Pete" },
{ "id": 2, "name": "Brandon" }
]
}
Вот повторно используемая функция:
const groupDataByKey = (data, key) =>
new Map(Object.entries(data.reduce((result, item) => ({
...result,
[item[key]]: [ ...(result[item[key]] || []), item ]
}), {})));
const exampleData = [
{ id: 1, name: "Tony", },
{ id: 2, name: "Lori" },
{ id: 2, name: "Pete" },
{ id: 2, name: "Brandon" },
];
console.info(...groupDataByKey(exampleData, 'id'));
.as-console-wrapper { top: 0; max-height: 100% !important; }
ОП попросил Map
.
@connexo Я только что обернул оператор возврата new Map(Object.entries(...))
Хорошо бы посмотреть на это consolelog.io/group-by-in-javascript