1.前言:今天在牛客网看到一道题
统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
- 不限制 key 的顺序
- 输入的字符串参数不会为空
- 忽略空白字符
2.我的思路
我的第一想法是直接用Map来做,但是仔细看了一下题发现需要返回一个对象,我就猜到了这题要考的是,对对象的掌握。于是我就有了下面的思路:
- 1.创建一个对象
- 2.创建一个数组把输入进来的字符串转出字符串数组
- 3.遍历字符串数组,给对象添加属性,属性名为字符串数组里的元素
- 4.当对象已经存在改属性时,值加1
3.代码
function count(str) {
var obj = {}
var arr = Array.from(str.replace(" ",""))//注意:要先把空格去掉
arr.forEach((elem)=>{
if(elem in obj){//判断对象中elem属性是否已经存在
obj[elem]++
}
else{
obj[elem]=1;
}
})
return obj
}
console.log(count('hello world'))//{h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}
4.总结
ES6中常用的对象调用(创建)属性的方法主要有两种
- 点字法:直接 obj.属性名即可
- 中括号法: obj[属性名]
对比:点字法不能在循环中使用,因为要创建的属性名为变量,会被直接识别为属性。
只有中括号发才能把属性名当做参数传进去,创建新属性