Цель: реализовать универсальную функцию для группировки данных, которая часто используется в обработке данных и аналитике.
Основная идея — перебрать массив и складывать элементы в объект, используя значение ключа для группировки.
result = {}
).item
) в исходном массиве с помощью цикла, например, forEach
.key
(groupKey = item[key]
).result
свойство с именем groupKey
(if (!result[groupKey])
).result[groupKey] = []
.item
в массив, соответствующий этому ключу: result[groupKey].push(item)
.result
.Этот подход можно элегантно реализовать с помощью метода Array.prototype.reduce
.
const groupBy = (arr, key) => {
// Используем reduce для преобразования массива в объект.
// accumulator (acc) — это объект, который мы будем строить.
// current (obj) — текущий элемент массива.
return arr.reduce((acc, obj) => {
// Получаем значение ключа для текущего объекта.
const groupKey = obj[key];
// Если в аккумуляторе еще нет массива для этого ключа, создаем его.
if (!acc[groupKey]) {
acc[groupKey] = [];
}
// Добавляем текущий объект в массив, соответствующий его ключу.
acc[groupKey].push(obj);
// Возвращаем обновленный аккумулятор для следующей итерации.
return acc;
}, {}); // Начальное значение для аккумулятора — пустой объект.
};
Анализ решения:
Вам нужно реализовать функцию groupBy
, которая принимает массив объектов arr
и строку key
. Функция должна сгруппировать все объекты из массива по значению их свойства key
и вернуть объект, где ключами являются значения свойства, а значениями — массивы объектов с этим ключом.
Этот метод невероятно полезен для организации данных, например, для группировки списка пользователей по городам или продуктов по категориям.
const data = [
{ city: 'Москва', temp: 15 },
{ city: 'Лондон', temp: 12 },
{ city: 'Москва', temp: 18 },
{ city: 'Париж', temp: 20 },
{ city: 'Лондон', temp: 14 }
];
groupBy(data, 'city');
/*
{
"Москва": [
{ "city": "Москва", "temp": 15 },
{ "city": "Москва", "temp": 18 }
],
"Лондон": [
{ "city": "Лондон", "temp": 12 },
{ "city": "Лондон", "temp": 14 }
],
"Париж": [
{ "city": "Париж", "temp": 20 }
]
}
*/
groupBy
.undefined
.Цель: реализовать универсальную функцию для группировки данных, которая часто используется в обработке данных и аналитике.
Основная идея — перебрать массив и складывать элементы в объект, используя значение ключа для группировки.
result = {}
).item
) в исходном массиве с помощью цикла, например, forEach
.key
(groupKey = item[key]
).result
свойство с именем groupKey
(if (!result[groupKey])
).result[groupKey] = []
.item
в массив, соответствующий этому ключу: result[groupKey].push(item)
.result
.Этот подход можно элегантно реализовать с помощью метода Array.prototype.reduce
.
const groupBy = (arr, key) => {
// Используем reduce для преобразования массива в объект.
// accumulator (acc) — это объект, который мы будем строить.
// current (obj) — текущий элемент массива.
return arr.reduce((acc, obj) => {
// Получаем значение ключа для текущего объекта.
const groupKey = obj[key];
// Если в аккумуляторе еще нет массива для этого ключа, создаем его.
if (!acc[groupKey]) {
acc[groupKey] = [];
}
// Добавляем текущий объект в массив, соответствующий его ключу.
acc[groupKey].push(obj);
// Возвращаем обновленный аккумулятор для следующей итерации.
return acc;
}, {}); // Начальное значение для аккумулятора — пустой объект.
};
Анализ решения:
Вам нужно реализовать функцию groupBy
, которая принимает массив объектов arr
и строку key
. Функция должна сгруппировать все объекты из массива по значению их свойства key
и вернуть объект, где ключами являются значения свойства, а значениями — массивы объектов с этим ключом.
Этот метод невероятно полезен для организации данных, например, для группировки списка пользователей по городам или продуктов по категориям.
const data = [
{ city: 'Москва', temp: 15 },
{ city: 'Лондон', temp: 12 },
{ city: 'Москва', temp: 18 },
{ city: 'Париж', temp: 20 },
{ city: 'Лондон', temp: 14 }
];
groupBy(data, 'city');
/*
{
"Москва": [
{ "city": "Москва", "temp": 15 },
{ "city": "Москва", "temp": 18 }
],
"Лондон": [
{ "city": "Лондон", "temp": 12 },
{ "city": "Лондон", "temp": 14 }
],
"Париж": [
{ "city": "Париж", "temp": 20 }
]
}
*/
groupBy
.undefined
.Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!