/**
Преобразовать исходную струкруту данных к структуре следующего вида:
const result = [
{ key: "А", totalCount: 700, cities: ["Астана"] },
{ key: "З", totalCount: 500, cities: ["Загреб"] },
{ key: "Л", totalCount: 500, cities: ["Лиссабон", "Лондон"] },
{ key: "М", totalCount: 700, cities: ["Магадан", "Москва"] },
{ key: "Н", totalCount: 800, cities: ["Новосибирск"] },
{ key: "Т", totalCount: 400, cities: ["Тверь"] }
];
где
key - первый символ названия города,
totalCount - сумма значений count для всех городов
cities - массив названий городов.
*
Значения в массиве results должны быть отсортированы по key
Значения в массивах cities должны быть отсортированы
*/
const data = {
Москва: { count: 100 },
Лондон: { count: 200 },
Лиссабон: { count: 300 },
Тверь: { count: 400 },
Загреб: { count: 500 },
Магадан: { count: 600 },
Астана: { count: 700 },
Новосибирск: { count: 800 },
};**Ответ
const data = {
Москва: { count: 100 },
Лондон: { count: 200 },
Лиссабон: { count: 300 },
Тверь: { count: 400 },
Загреб: { count: 500 },
Магадан: { count: 600 },
Астана: { count: 700 },
Новосибирск: { count: 800 },
};
function countryData(data) {
const result = [];
const obj = {};
for (let key in data) {
const char = key[0].toUpperCase();
if (obj[char]) {
obj[char].totalCount += data[key].count;
obj[char].cities.push(key);
} else {
obj[char] = {
key: char,
totalCount: data[key].count,
cities: [key],
};
}
}
for (let key in obj) {
obj[key].cities.sort();
result.push(obj[key]);
}
}
console.log(countryData(data));const transformCities = (data) => {
if (data?.length) {
return null;
}
const transformToArray = Object.entries(data);
const aloneCities = transformToArray.map((el) => {
return { key: el[0][0], count: el[1].count, city: [el[0]] };
});
const accArrOfCities = aloneCities.reduce((acc, { key, count, city }) => {
if (!acc[key]) {
acc[key] = { key, totalCount: 0, cities: [] };
}
acc[key].totalCount += count;
acc[key].cities.push(...city);
return acc;
}, []);
return Object.values(accArrOfCities).sort((a, b) =>
a.key.localeCompare(b.key),
);
};