了解用于计算字符串中每个字符出现次数的JavaScript代码



我需要一些帮助来理解以下代码:

function AllChars(str) {
var myObj = {};
for(var i=0;i<str.length;i++){
if(myObj[str[i]]===undefined){
myObj[str[i]]=0;
}
myObj[str[i]]++;
}
return myObj;
}
AllChars('banana');
Output
{b: 1, a: 3, n: 2}

它基本上返回一个对象,其中每个键都是给定字符串中的一个字符。问题是:

for循环从0到字符串的长度。然后if函数检查str[0],它是第一个元素,应该是字母'b',然后这个字母'b'被添加到myObj[str[i]]]中。我不明白为什么myObj[str[0]在str[0]中是'b'时会被未定义?

1。AllChars函数

函数将字符串作为参数,并在字符串(str)中循环。。。对于每个循环,它检索字符串中的下一个字符。

  1. 现在,如果以前还没有遇到这个角色添加到"空"对象中作为键,其值为0。通过这种方式,它会创建一个该字符在字符串str中出现次数的计数器。

  2. 否则(如果它(该字符:str[i])已经遇到),无需在myObj中再次对其进行索引。

在每个循环结束时,(当前字符的)计数器递增。

在函数结束时,返回myObj

2.AllChars('banana');

这一行调用上面定义的函数AllChars,并将字符串'banana'作为参数。

3.输出

输出向我表明,代码是从javascript控制台运行的,该控制台输出从AllChars('banana');返回的myObj的值

它要么是浏览器控制台,要么是node.js控制台。

因此,输出代表了那个(key=>value)对象。

{b: 1, a: 3, n: 2}
myObj是一个新的空对象。所以要检查的是,如果我们还开始计数那个字母,如果没有,它会将其初始化为0。

代码统计每个字母在给定字符串中出现的次数。如果还没有这样的字母,它会添加一个字母作为属性,并在增加后计数。

每当你试图从一个不存在的对象中获取东西时,它都会返回'undefined'。上面的代码只是利用该功能来检查myObj对象中是否存在"str"参数中的字母。

统计字符串中每个字符的出现次数。ES6解决方案更优雅:

const chars = string =>
[...string].reduce(
(all, e) => ({ ...all, [e]: !all[e] ? 1 : all[e] + 1 }),
{}
);

const chars = string =>
[...string].reduce(
(all, e) => ({ ...all, [e]: !all[e] ? 1 : all[e] + 1 }),
{}
);
console.log(
chars('bananaa')
)

最新更新