javascript读取出字符串中每个字符出现次数

来源:互联网 发布:广东联合电服数据科技 编辑:程序博客网 时间:2024/05/19 08:24

检测字符出现次数

如字符串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,kfor(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);        
1 0