1. 程式人生 > >javascript讀取出字串中每個字元出現次數

javascript讀取出字串中每個字元出現次數

檢測字元出現次數

如字串arr=”abcdaabc”,請用js讀取出arr字串中每個字母重複出現的次數分別是多少?

  • 方法一
var arr = 'abcdaabc';

var info = arr
    .split('')
    .reduce((p, k) => (p[k]++ || (p[k] = 1), p), {});

console.log(info); //{ a: 3, b: 2, c: 2, d: 1 }
  • 方法二
    reduce不相容低版本
var temp = {};
   'abcdaabc'.replace(/(\w{1})/g,function
($1){
temp[$1] ? temp[$1]+=1 : temp[$1] = 1; }) console.log(temp) // {a: 3, b: 2, c: 2, d: 1}
  • 方法三
var obj = {}
'abcdaabc efgh'.replace(/(\w)/g,function(word,p){
    obj[p[0]] ? obj[p[0]]+=1 : obj[p[0]] =1 
})
console.log(obj)
  • 方法四
var obj = {};
'abcdaabc'.split('').sort().join(''
).replace(/(.)(\1+)?/g, function(m,k){obj[k] = m.length}); console.log(obj); // {a: 3, b: 2, c: 2, d: 1}
  • 方法五
const arr="abcdaabc";
let counter = {};
for (let i = 0, len = arr.length; i < len; i++ ) {
    counter[arr[i]] ? counter[arr[i]]++ : counter[arr[i]] = 1;
}
console.log(counter);
  • 方法六
var arr="abcdaabc"
var count = {}; var i,k for(i=0;i<arr.length;i++){ var chr = arr.charAt(i); if( typeof count[chr] === "undefined"){ count[chr] = 1; }else{ count[chr]++; } } console.log(count) for(k in count){ if(count.hasOwnProperty(k)){ console.log("%s:%d",k,count[k]); } }
  • 方法七
var str  = "addbsnjfsss";
var strArray = str.split("");
var returnObj = {};
for(var i = 0; i < strArray.length; i++) {
    if(returnObj[strArray[i]]) {
        returnObj[strArray[i]] = parseInt(returnObj[strArray[i]]) + 1;
    } else {
        returnObj[strArray[i]] = 1;
    }
}
for(var p in returnObj) {
    console.log(p + " : " + returnObj[p]);
}
  • 方法八
var str = 'abcdacbacxjkl';

var Counter = new Counter();

Counter.count(str); 

console.log(Counter.getResult()); //{a: 3, b: 2, c: 3, d: 1, x: 1…}


function Counter() {
    var temp = {};

    var push = function(item) {
        temp[item] = temp[item] ? ++temp[item] : 1;
    }

    this.count = function(str) {
        str.split('').forEach( function(item) {
            push(item);
        });
    }

    this.getResult = function() {
        return temp;
    }
}
  • 方法九
var str = "aaaabbbccccddfgh";
var o={};
for(var i=0;i<str.length;i++){
    var key = str.charAt(i);
    if(o[key] && o[key].value==key) {
        o[key].count+=1;
    }
    else{
        o[key]={};
        o[key].value=key;
        o[key].count=1;
    }
};
for(key in o){
    console.log(o[key].value+'='+o[key].count);
};
  • 方法十
var str = 'abcdaabc';
var result = {};
str.split('').forEach(function (char) {
    var val = result[char];
    result[char] = val ? ++val : 1;
}); 
console.log(result);
  • 方法十一
    用replace
function getSameWordCount(str) {
    var count = {};
    if (typeof str !== 'string') {
        return count;
    }
    while (str) {
        var originCount = str.length;
        var char = str.charAt(0);
        var charCount = (str = str.replace(new RegExp(char, 'g'), '')).length;
        count[char] = originCount - charCount;
    }
    return count;
}
  • 方法十二
    findIndexE6規範
var arr = 'absdakbsabdabsab';
var _ss = arr.split('');
var _aa = [];
_ss.map(function(e){
    var _find = findChar(e);
    if(_find !== -1) _aa[_find].num++;
    else _aa.push({code:e,num:1});
})

function findChar(c){
    return _aa.findIndex(function(ele,index){
        if(ele.code === c) return true;
    })
}
  • 方法十三
    效率更高的二叉樹
var str='sadzewrwewasdfaxzvzxfasdaswe';

function count(s, e)
{
    if(s>e)
    {
        return {};
    }
    else if(s==e)    
    {
        var x=str.charAt(s);

        var json={};

        json[x]=1;

        return json;
    }

    var c=Math.floor((s+e)/2);


    var l=count(s, c);        
    var r=count(c+1, e);    


    var result=l;

    for(var i in r)
    {


        if(result[i])    
        {
            result[i]+=r[i];
        }
        else            
        {
            result[i]=r[i];
        }
    }

    return result;
}

console.log(count(0, str.length-1));
  • 方法十四
var str="dfjkfkhsdjk hksjh",
                i=0,
                obj={};
            for(i=0;i<str.length;i++) {
                var ch=str.charAt(i);                    
                if (!obj[ch]) {
                    obj[ch]=1;
                } else{
                    obj[ch]++;
                }    
            }
            for(var r in obj)
            {
                console.log(r+","+obj[r]);
            }
  • 方法十五
    在字串的前提條件下,對字元進行排序,使用字串的lastIndexOf或陣列的lastIndexOf方法是一個思路,可以減少查詢次數。
var str = "aasdkfjwoensweljoipwefslnvxcvasfs";

str = str.split('').sort().join('');

var result = {}

for(var i = 0, j = str.length; i < j; i++){
    var char = str[i];
    result[char] = str.lastIndexOf(char) - i + 1;
    i = str.lastIndexOf(char)
}

console.table(result);

另外:

var str = "aasdkfjwoensweljoipwefslnvxcvasfs";

str = str.split('').sort().join('');

var arr = str.match(/(\w)\1+/g);

var result = {}

for(var i = 0, j = arr.length; i < j; i++){
    var item = arr[i];
    result[item.charAt(0)] = item.length;
}

console.table(result);
  • 方法十六
    lodash實現
_.countBy('qwertqw  eqwq'.replace(/\s+/g,"").split(""), function(str) {
  return str;
});
  • 方法十七
function charStats(str) {
    var visitStats = {};

    for (var i = 0; i < str.length; i++) {
        var char = str[i];
        if (!visitStats[char]++)
            visitStats[char] = 1;
    }

    return visitStats;
}

console.log(charStats('abcdaabc')); // {a: 3, b: 2, c: 2, d: 1}
  • 方法十八
function getShowTimes(string,indexChar){
            //返回一個字元在字串中出現的次數
            return (string.split(indexChar).length-1);
   }
  • 方法十九
  var str = "aabbccf";

    var arr = str.split("");

    var count = {}; 
    arr.forEach(function(i) { 
        count[i] = (count[i]||0)+1;  
    });

    console.log(count);