JS Как создать функцию, которая подсчитывает количество хэштегов - PullRequest
0 голосов
/ 24 декабря 2018

Этот вопрос был удален

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Вы можете использовать объект для проверки и подсчета.

function countHashtagsAndMentions(str) {
    var result = { '#': 0, '@': 0 },
        i;

    for (i = 0; i < str.length; i++) {
        if (str[i] in result) ++result[str[i]];
    }
    return result;
}

var str = "So excited to start  @coding on Monday! #learntocode #codingbootcamp";

console.log(countHashtagsAndMentions(str));
0 голосов
/ 24 декабря 2018

Использовать массив # уменьшить

const message = "So excited to start @coding on Monday! #learntocode #codingbootcamp"

const res = message.split("").reduce((acc,cur)=>{
  
  if('#@'.includes(cur)){
    const key = cur === '#' ? 'hashtags' : 'mentions';
    acc[key] = acc[key] + 1;

  }
  
  return acc;
}, {mentions: 0, hashtags: 0})

console.log(res);
0 голосов
/ 24 декабря 2018

Простой цикл делает это.Поскольку вы используете синтаксис ES2015 +, for-of будет хорошо работать:

function countHashtagsAndMentions(str) {
  let hashtags = 0;
  let mentions = 0;
  for (const ch of str) {
    if (ch === "#") {
      ++hashtags;
    } else if (ch === "@") {
      ++mentions;
    }
  }
  return {hashtags, mentions};
}
let str = "So excited to start  @coding on Monday! #learntocode #codingbootcamp";
console.log(countHashtagsAndMentions(str));

Это работает, потому что строки повторяемы в ES2015 +.for-of loop неявно использует итератор из строки для прохода по ее символам.Таким образом, в цикле ch - это каждый символ строки.Обратите внимание, что в отличие от str.split(), итератор строк не разделяет отдельно две половины символа, для которого требуется суррогатная пара (как и большинство смайликов), что обычно является тем, что вы хотите.

Это:

for (const ch of str) {
    // ...
}

фактически совпадает с

let it = str[Symbol.iterator]();
let rec;
while (!(rec = it.next()).done) {
    const ch = rec.value;
    // ...
}

, но без переменных it и rec.


В качестве альтернативы, вы можете использовать replace срегулярное выражение для замены всех символов, кроме тех, которые вы хотите считать.Похоже, это будет дороже, но это то, что движок JavaScript может оптимизировать:

function countHashtagsAndMentions(str) {
  return {
    hashtags: str.replace(/[^#]/g, "").length,
    mentions: str.replace(/[^@]/g, "").length
  };
}
let str = "So excited to start  @coding on Monday! #learntocode #codingbootcamp";
console.log(countHashtagsAndMentions(str));

То, что вы используете, вероятно, частично зависит от длины строки.Опция replace хороша и коротка, но проходит строку дважды.

...