Цель: реализовать универсальную функцию для группировки данных, которая часто используется в обработке данных и аналитике.
Основная идея — перебрать массив и складывать элементы в объект, используя значение ключа для группировки.
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.Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!