解读JS字符串字符统计

我们手里有一个count函数来做关于字符串的统计,比如我传入一个字符串"apple",那么返回的结果显示应该是 {a:1,p:2,l:1,e:1} 这样的结果

英文部分: count 有总计,也有统计的意思, JS里面设置函数名之类的也可以完全英语单词语义化,便于理解。

function count (str){  //声明一个count函数  ,()形参里加入Str 代表字符串简写
      
      //初始化
     var i = 0;
     var len = str.length;
     var resultObj = {}   //生成一个空对象,等会往里面塞东西

     for(; i < len ; i++){
             var   curChar =  str.charAt(i);

//如果resultObj[curChar]存在,则自增,如果不存在就赋值1.
if(resultObj[curChar]){ resultObj[curChar]++; } else { resultObj[curChar] = 1; } } return resultObje; } count('apple')

 

思路:

先生成一个count函数、里面用循环的方式把字符串一个一个拆解,放到空对象 resultObj当中 ,返回resultObj这个值。

 

疑问1:

1) 为什么这里resultObj[curChar]  要这么用 而不是用 resultObj.curChar ?

答: 首先, resultObj.curChar这么用会报错, 为什么? 你可以想象下 resultObjr.'a' , 肯定会出现语法错误。   [ ] 是针对属性操作的,完全包含点操作符的作用,里面既可以放符合命名规则的属性和不符合变量命名规则的属性, 而curChar 这里的赋值是charAt的字符串,自带了双引号,所以 在中括号里也就不需要再输入成对出现的引号。

 

2) 这个字符串是怎么塞到对象里进去的?

答: 首先我们有设置形参: str ,  实参是"apple" 从这一刻就把 参数 传入进去,  其次也是最重点的,对象里的值是 以 “ 键值对” 的形式出现, 那么我们可以去掉IF 语句 ,单独设置 resultObj[curChar] = 1 可以看看是啥, 另外最重要的也就是在esle 这里就已经把整个对象的值都生成进去了。 当发现有重复的存在才会自增。

我们举个例子
var person = {};
person['name'] = 'cool';
console.log(person);
自己看看是啥 就明白是怎么塞进对象了。

 

3) 为什么这里用retrun 呢?

答: return 是什么? 我们来回顾下,return break countine 这三个中,return 是函数返回值,代表函数运算的结果, return 的作用是什么 ?  1  - 返回函数的运算结果(1、如果函数里有return 这个函数的结果就是 return后的值 2、如果没有return 返回的结果就是undefined)    2 - 阻止函数继续运行。 return后的是一个结果, 这个函数的结果是可以被调用的。 而Console.log 是打印输出到浏览器控制台, 无法被调用的,对你的调用没作用 明白了吧。

function fn(a,b){
    console.log(a+b);
}
fn(3,4);

var result = fn(3,4);

console.log(result);

在控制台里的情况是

2行 7
2行 7
8行 undefined

是一个undefined

总结:这道题里涉及到的知识点内容有

1. charAt()

2. 属性操作(通用)

3. function 函数(包括  for循环 , if条件判断)

posted on 2017-08-18 11:51  宋王爷  阅读(874)  评论(1)    收藏  举报

导航