首页 > 解决方案 > JS 如何创建一个计算标签数量的函数

问题描述

此问题已被删除

标签: javascriptloopscountnumbers

解决方案


一个简单的循环就可以了。由于您使用的是 ES2015+ 语法,因此 afor-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循环隐式使用字符串中的迭代器来遍历其字符。所以在循环中,ch是字符串中的每个字符。请注意,与 不同str.split()的是,字符串迭代器不会将需要代理对(如大多数表情符号)的字符的两半分开,这通常是您想要的。

这个:

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

实际上与

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

但没有itandrec变量。


或者,您可以使用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选项既好又短,但确实通过字符串两次。


推荐阅读