Добрый день!
Реализуйте и экспортируйте по умолчанию функцию для группировки объектов по заданному свойству. Функция принимает аргументами массив объектов и название свойства для группировки. Она должна возвращать объект, где ключ - это значение по заданному свойству, а значение - массив с данными, подходящими для группы.
const students = [
{ name: 'Tirion', class: 'B', mark: 3 },
{ name: 'Keit', class: 'A', mark: 3 },
{ name: 'Ramsey', class: 'A', mark: 4 },
];
groupBy([], ''); // {}
groupBy(students, 'mark');
// {
// 3: [
// { name: "Tirion", class: "B", mark: 3 },
// { name: "Keit", class: "A", mark: 3 },
// ],
// 4: [
// { name: "Ramsey", class: "A", mark: 4 },
// ],
// }
Мой код следующий:
const groupBy = (usersArr, criteria) => {
return usersArr.reduce((accum, user) => {
let key = criteria;
if (!_.has(accum, user.key)) {
accum[user.key] = [];
}
accum[user.key].push(user);
return accum;
}, {});
};
console.log(groupBy(students, 'mark'));
Если я правильно понимаю, то вроде все написал по логике корректно, но есть проблема с аргументом criteria. Внутри reduce() criteria не видно, я создал переменную key и присвоил ей значение criteria. Criteria вроде стала видна, но теперь сама переменная key никак не функционирует в дальнейшем коде, будто ее нет.
Почему так происходит?
И верен ли в остальном код?
Нужно решить через reduce, и я знаю, что есть функция groupBy в lodash библиотеке. Смысл задачи и написать ее самому.
Спасибо за помощь!