javascript - JS 如何创建一个计算标签数量的函数
问题描述
此问题已被删除
解决方案
一个简单的循环就可以了。由于您使用的是 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;
// ...
}
但没有it
andrec
变量。
或者,您可以使用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
选项既好又短,但确实通过字符串两次。
推荐阅读
- python - Queryset 按另一个查询集中的变量过滤
- sql - MariaDB 使用 'distinct' 关键字改变了其他列的预期行为
- c# - HttpResponseMessage 内容以 unicode 形式返回
- plugins - Fastlane 的 Nexus 存储库上传插件
- csv - 将 CSV 加载到 d3 v5、v6
- python - Qtwidgets 的问题
- arrays - PowerShell 如何根据脚本数组计数循环脚本
- c++ - GDB 不会在主断点处停止
- php - 结帐后使用 WooCommerce 帐单电子邮件更新 WordPress 帐户电子邮件
- php - WooCommerce:在结帐、我的帐户、管理员订单和 WordPress 用户中添加生日账单字段