помогите решить задачку
Надо создать функцию, которая будет работать следующим образом:
1 Принимать на вход строку и подсчитывать количество всех слов в ней 2 Отсортировать их по количеству 3 Вывести n самых популярных "aaa bb bb rrrrr aaa r t", 2 -> (("aaa", 2), ("bb", 2)) //func countWords(wordsStr: Str, n: Int) -> List[Tuple[String, Int]] let input: string = "aaa bb bb rrrrr aaa r t"; function countWords(str: string, n: number){ return str.split(' ').length; } console.log(countWords(input)); 1 условие выполнил, помогите пожалуйста остальные 2 сделать |
prototip,
если поискать, то штук 10 на форуме есть ... но проще написать снова ))) |
рони,
на форуме возможно и есть но найти не могу |
prototip,
let input = "aaa bb bb rrrrr aaa r t"; function countWords(str, number){ str = str.split(/\s+/); const obj = str.reduce((a, b) => (a[b] = (a[b]||0) + 1, a), {}); str = Object.keys(obj).sort((a, b) => (obj[b] - obj[a]) || (b.length - a.length)); return str.slice(0, number); } alert(countWords(input, 2)); |
рони,
я имел ввиду другой результат и можете показать как сделать без регулярок? "aaa bb bb rrrrr aaa r t", 2 -> (("aaa", 2), ("bb", 2), ("rrrr",1), ("r", 1), ("t", 1)) |
prototip,
:-? ... тут не переводимый на русский комментарий. let input = "aaa bb bb rrrrr aaa r t"; function countWords(str, number){ str = str.split(" "); const obj = str.reduce((a, b) => (a[b] = (a[b]||0) + 1, a), {}); str = Object.keys(obj).sort((a, b) => (obj[b] - obj[a]) || (b.length - a.length)); if(number == void 0) number = str.length; return str.slice(0, number).map(a => [a, obj[a]]); } alert(JSON.stringify(countWords(input))); или так let input = "aaa bb bb rrrrr aaa r t"; function countWords(str){ str = str.split(" "); const obj = str.reduce((a, b) => (a[b] = (a[b]||0) + 1, a), {}); return Object.entries(obj).sort((a, b) => b[1] - a[1]);; } alert(JSON.stringify(countWords(input))); |
рони,
прошу прощения это я недопонял, результат должен быть: [ [ 'aaa', 2 ], [ 'bb', 2 ] ] let input: string = "aaa bb bb rrrrr aaa r t"; function countWords(str: string, n: number){ let splitStr = str.split(' '); let res = new Map(); for(let i = 0; i < splitStr.length; i++){ if(!res.has(splitStr[i])){ res.set(splitStr[i], 1) }else{ let count = res.get(splitStr[i]); res.set(splitStr[i], count + 1) } } let arr = Array.from(res.entries()); return arr; } console.log(countWords(input, 2)); // [ [ 'aaa', 2 ], [ 'bb', 2 ], [ 'rrrrr', 1 ], [ 'r', 1 ], [ 't', 1 ] ] решил сделать немного по другому, потому что не понял некоторые моменты в вашем коде. как по итогу отсортировать, чтобы результат в этом коде был: [ [ 'aaa', 2 ], [ 'bb', 2 ] ] и при этом если n 1 то оно выведет только одну строку, если n 3, то выведет 3 самых пополярных ? |
Цитата:
Цитата:
arr.sort((a, b) => b[1] - a[1]) |
рони,
благодарю |
Часовой пояс GMT +3, время: 15:17. |