js查找字符串相同字符的个数


        今天在微信上看到一篇关于前端面试题的文章,其中有一道题是找出字符串 var str = 'aaaabbbcccdfg' 的相同字符个数。看了里面的答案,感觉有点难懂,而且运行的时候报错。估计是代码写的有问题,自己也修复了一些,但还是报错,看来技术有限。
       现在把我自己写的记录下来,感觉简单易懂,使用方便,如下:
 

var str = '231452erfsdg35@#¥%63erefds我是大神';

console.log(strNubAry(str));   //打印成数组
console.log(strNubObj(str));   //打印成对象

//计算成数组 & 当字符串里有数字或特殊字符的时候建议使用数组
function strNubAry(str){
var ary = [];
fnFas(str);
function fnFas(str){
var s1 = str.charAt(0);
var _str = '';
var n = 0;
 
for (var i = 0; i < str.length; i++) {
if(str.charAt(i) == s1)
n++;
else
_str += str.charAt(i);
}
 
ary.push(s1+'='+n)
 
if(_str.length > 0){
fnFas(_str);
}
}
return ary;
}
 
//计算成对象
function strNubObj(str){
var obj = {};
var ary = [];
fnFas(str);
function fnFas(str){
var s1 = str.charAt(0);
var _str = '';
var n = 0;
 
for (var i = 0; i < str.length; i++) {
if(str.charAt(i) == s1)
n++;
else
_str += str.charAt(i);
}
try{
eval('obj.'+s1+'='+n)
}catch(err){
ary.push(s1+'='+n)
}
 
if(_str.length > 0){
fnFas(_str);
}
}
if(ary.length > 0){
obj.aNumber = ary;
}
return obj;
}  

         这里我写了两个方法,一个是用数组显示,一个是用对象显示。为什么要写两个方法呢,其实两个方法基本一样,也可以合并成一个方法,只是分两个方法看起来更容易懂。这里的对象方法有个小问题,就是如果字符是数字或特殊字符,那么eval()函数就会报错,这里给出增加对象属性 aNumber 把 是数字的字符存储为数组赋值给它,但然aNumber这样命名肯能不会很贴切,暂时就这么命名吧。但如果用显示成数组那么就没什么问题了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM