Задача, преобразовать строку в объект вида:
Написал функцию:
function countWords(str) {
var arr = str.split(' ');
var obj = {};
for (var i = 0; i < arr.length; i++) {
var word = arr[i];
obj[word] = str.split(word).length - 1;
}
return obj;
}
console.log(countWords('ask a bunch get a bunch'));
// Результат --> {ask: 1, a: 3, bunch: 2, get: 1}
// Ожидаемый результат --> {ask: 1, a: 2, bunch: 2, get: 1}
Как добиться, чтобы 'a' из слова 'ask' не считалась вхождением слова 'a'?
Пытался регулярными выражениями, но не понимаю, как приделать '\b' к переменной word в split(word).
function count(s) {
var a = s.split(/[^a-zа-яё]+/ig).filter(Boolean)
var res = Object.create(null)
for (var q=0; q<a.length; ++q) {
res[a[q]] = ~~res[a[q]] + 1
}
return res
}
console.log(count("Just a test with toString and русский текст, test again and текст again!"))
.as-console-wrapper.as-console-wrapper { max-height: 100vh; }
Что тут интересного:
.filter(Boolean) отсеивает пустые строки в случае, если в начале или конце строки стояли разделителиObject.create(null) создаёт чистый объект, у которого в прототипе нет ничего, в том числе методов как toString~~res[a[q]] приводит нечисловой мусор в 0 - в данном случае надо для undefined, но если заменить Object.create(null) на {}, то поможет ещё и с toString, т. к. это не число. Из минусов - ограничение в 231-1, но столько слов в строке не будет.Хотя более элегантный способ уже и приведен в ответе @Qwertiy оставлю этот код как один вариантов.
function countWords(str) {
var arr = str.split(' ');
var obj = {};
for (var i = 0; i < arr.length; i++) {
var word = arr[i];
if( !obj[word]) obj[word] = 1
else obj[word]++;
}
return obj;
}
console.log(countWords('ask a bunch get a bunch'));
var obj = {} следует заменить на Object.create(null), как написано в комментариях.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости