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