Подсчитайте вхождение каждого слова в строку и поместите его в объект - PullRequest
0 голосов
/ 23 мая 2019

Мне нужно получить общее количество каждого слова в строке.

Я хотел добиться этого с помощью редуктора, так как я новичок в методе редукции, я не мог его решить.

getWordOccurence = (str1) => {
  splitStr = str1.split(' ');
  let count=0;
  const wordCount = splitStr.reduce((acc, curr) => ({...acc,[curr]:count}),{})
  console.log(wordCount)
};

getWordOccurence('apple orange apple banana grapes ?');

Ожидаемое: {"яблоко": 2, "апельсин": 1, "банан": 1, "виноград": 1}

Ответы [ 3 ]

2 голосов
/ 23 мая 2019

Вы можете попробовать использовать оператор запятой. Я думаю, что лучше использовать оператор запятой, чтобы вернуть аккумулятор, а не использовать оператор распространения.

const getWordOccurence = (str1) => {
  splitStr = str1.split(' ');
  const wordCount = splitStr.reduce((ac, x) => (ac[x] = ac[x] + 1 || 1,ac),{})
  console.log(wordCount)
};

getWordOccurence('apple orange apple banana grapes ?');

Одна строка для функции будет

const getWordOccurence = (str) => str.split(' ').reduce((ac,a) => (ac[a] = ac[a] + 1 || 1,ac),{})

console.log(getWordOccurence('apple orange apple banana grapes ?'));
0 голосов
/ 23 мая 2019

Я хотел бы опубликовать версию чистого редуктора.

const getWordOccurence = (str1) => {
  const splitStr = str1.split(' ');
  const wordCount = splitStr.reduce((acc, x)=>({...acc,[x]:acc[x]+1||1}),{})
  console.log(wordCount)
};

getWordOccurence('apple orange apple banana grapes ?');

в противном случае, я рекомендую просто использовать аккумулятор и проходить через объект (вы можете всегда извлекать его в функцию, например occurence или что-то еще, вам даже не нужно передавать {} тогда ).

const getWordOccurence = (str1) => {
  const words = str1.split(' ');
  
  //function occurence(words){
  let acc={};
  for(let word of words)
    acc[word] = acc[word]+1 || 1
  //return acc}
  
  //const wordCount = occurence(words)
  const wordCount = acc //just in case you want a *const* result
  
  console.log(wordCount)
};

getWordOccurence('apple orange apple banana grapes ?');
0 голосов
/ 23 мая 2019

Вы можете String.prototype.split () string и использовать Array.prototype.reduce () для получения результата object

В случае, если вам необходимо исключить не слова, вы можете сделать Регулярное выражение /[a-z]/i, чтобы проверить String.prototype.match () c.match(/[a-z]/i)

Код:

const str = 'apple orange apple banana grapes ?';
const getWordOccurence = s => s.split(' ').reduce((a, c) => {
  if (c.match(/[a-z]/i)) { // Only words...
    a[c] = (a[c] || 0) + 1;
  }
  return a;
}, {});
const result = getWordOccurence(str);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...