Сортировка прописных и строчных букв
Всем привет! Как сделать так, чтобы вместо массива:
["Connecticut", "Land", "Massachusetts", "Old", "Thirteen", "Vermont", "and", "land", "land", "of", "of", "the"],
выводился массив:
[ "and", "land", "land", "of", "of", "the", "Connecticut", "Land", "Massachusetts", "Old", "Thirteen", "Vermont"]
Возможно с помощью метода .map или .filter пробегаться по готовому элементу и если 1-ая буква прописная, то закидывать в локальную переменную типо lowCase, тоже самое для Upcase. А потом сконкатить.
const sort = (sentence) =>{
const arr = sentence.replace(/[^A-Za-zА-Яа-яЁё]/g, " ").split(' ').filter(i => i!=="").sort()
return arr.sort()
}
sort("Land of the Old Thirteen! Massachusetts land! land of Vermont and Connecticut!")
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
В функции для сортировки можно проверять: Если первая буква большая, сделать её маленькой, если маленькая - сделать большой, и сравнивать как обычно:
console.log( sort("Land of the Old Thirteen! Massachusetts land! land of Vermont and Connecticut!") );
function sort(sentence) {
return sentence.match(/[a-zа-яё]+/gi).sort(_sorter);
/***/
function _sorter(a, b) {
a = _toggleCase(a);
b = _toggleCase(b);
return (a < b) ? -1 : 1;
}
function _toggleCase(str) {
let upper = (str[0].toUpperCase() === str[0]);
return str[ upper ? "toLowerCase" : "toUpperCase" ]();
}
};
P.s. флажок i в регулярном выражении - "insensitive", возьмет и большие, и маленькие буквы. А .match() и так возвращает массив совпадений, без необходимости каких-то других операций.