1) Преобразовать строку в массив символов, удалить пустой, изменить на верхний регистр. 2) Использовать Reduce, go через каждый символ и построить «ключи» объекта в виде значений Char, которые должны быть до, после и в индексе. 3) если Char уже существует в объекте, добавьте новую статистику и рассчитайте максимальное расстояние.
const getAnalytics = str => {
const caps = Array.from(str.toUpperCase()).filter(x => x.trim());
return caps.reduce((acc, char, i) => {
const prepost = {
before: caps[i-1] || '',
after: caps[i+1] || '',
index: i
};
if (char in acc) {
const chars = [...acc[char].chars, prepost];
const mm = chars.reduce((acc, curr) => ({
max: Math.max(acc.max, curr.index),
min: Math.min(acc.min, curr.index)
}), {max: -Infinity, min: Infinity});
acc[char] = { chars, max_distance: mm.max - mm.min };
} else {
acc[char] = { chars: [prepost], max_distance: 0 };
}
return acc;
}, {});
}
console.log(getAnalytics('its cool and awesome'));