javascript 在JS中,计算在字符串中出现的次数[已关闭]

yc0p9oo0  于 2023-01-29  发布在  Java
关注(0)|答案(3)|浏览(123)

20小时前关门了。
Improve this question
我有一段代码,它会计算在给定字符串中出现的次数。
但它只会计算字符串中唯一特殊字符的数量。
我怎样才能改变这种行为?
它应该给我3,而不是1,因为我有3个空格。
谢谢。

var string = 'hello, i am blue.';
var specialChar = [' ', '!'];

let count = 0
specialChar.forEach(word => {
  string.includes(word) && count++
});

console.log(count);
fkaflof6

fkaflof61#

您所做的是对specialChar进行迭代,这将产生两次迭代:第一次迭代将检查' '是否包括在字符串中,这是真的,因此增加count,并且第二次迭代将检查'!'是否包括在字符串中,这不是真的,因此得到1。
实际上,你应该做的是遍历字符串,检查每个字符是否包含在specialChar数组中,下面是你如何用最少的修改来实现这一点(代码可以改进并变得更清晰)。
注意:.split("")将字符串拆分为一个字符数组。

var string = 'hello, i am blue.';
var specialChar = [' ', '!'];

let count = 0
string.split("").forEach(char => {
  specialChar.includes(char) && count++
});

console.log(count);
rbpvctlc

rbpvctlc2#

由于您使用的是一个匹配[" ", "!"]的数组,您需要将其作为输出,并使用计数对象,即:{" ": 5, "!": 2}.
下面是两个示例,一个使用String.prototype.match(),另一个对String使用Spread Syntax ...

使用匹配

和Array.prototype.reduce()来将初始Array结果缩减为Object结果

const string = 'hello, i am blue. And this is an Exclamation! Actually, two!';
const specialChar = [' ', '!'];

const regEscape = v => v.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');

const count = specialChar.reduce((ob, ch) => {
  ob[ch] = string.match(new RegExp(regEscape(ch), "g")).length;
  return ob; 
}, {}); // << This {} is the `ob` accumulator object

console.log(count);

使用字符串排列...

将字符串转换为Unicode代码点序列/符号的数组

const string = 'hello, i am blue. And this is an Exclamation! Actually, two!';
const specialChar = [' ', '!'];

const count = [...string].reduce((ob, ch) => {
  if (!specialChar.includes(ch)) return ob;
  ob[ch] ??= 0;
  ob[ch] += 1;
  return ob; 
}, {}); // << This {} is the `ob` accumulator object

console.log(count);
tyu7yeag

tyu7yeag3#

计算字符串中字符数的一种方法是按字符拆分字符串,然后计算各部分的个数并减一。

var string = 'hello! i am blue!';
var specialChar = [' ', '!'];

let count = 0
specialChar.forEach(char => {
  count += string.split(char).length - 1
});

console.log(count);

使用reduce转换为函数

function countChars(string, chars) {
    return chars.reduce(
      (acc, char) => acc + string.split(char).length - 1,
      0
    );
}

console.log(countChars('hello! i am blue!', [' ', '!']));

相关问题