JS如何创建一个计算标签数量的函数

时间:2018-12-24 15:26:55

标签: javascript loops count numbers

此问题已删除

3 个答案:

答案 0 :(得分:2)

一个简单的循环就可以了。由于您使用的是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 +中为iterablefor-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;
    // ...
}

但没有itrec变量。


或者,您可以将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选项很不错,很短,但是确实两次遍历了字符串。

答案 1 :(得分:0)

您可以使用一个对象进行检查和计数。

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));

答案 2 :(得分:0)

使用Array#reduce

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);