javascript - js字符串中如何判断出现最多的字符是哪一个?
PHP中文网
PHP中文网 2017-04-11 11:40:44
[JavaScript讨论组]

var a = 'xiaomingxiaowangzhangshanlisi'

要求计算出a中出现最多的字符是什么?出现了多少次?
这个该怎么写循环啊?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(10)
迷茫

原理都差不多,这个要少遍历一次

function max_char(s){
    var count = {};
    var max_char = {char: '', count:0}; 
    for(var i=0;i<s.length;i++){ 
        var c = s.charAt(i);
        if(!count[c]){
            count[c] = 1;
        }else{
            count[c] += 1;
        }
        if(count[c] > max_char['count']){
            max_char['char'] = c;
            max_char['count'] = count[c];
        }
    }
    return max_char;
}
伊谢尔伦
//仅提供思路

var a = 'xiaomingxiaowangzhangshanlisi';
    var obj = {}
    for (var i=0;i<a.length;i++){
        if(obj[a[i]]){
            obj[a[i]]++
        }else{
            obj[a[i]]=1
        }
    }
    console.log(obj)
    var temp = 0
    var max;
    for(var j =0;j<Object.keys(obj).length;j++){
      if(temp<obj[Object.keys(obj)[j]]){
        temp = obj[Object.keys(obj)[j]]
        max = Object.keys(obj)[j]
      }
    }
    console.log(max)
天蓬老师

抖个机灵:

let s = '3432lqku53bq;235ub2o54ub2q3n;l5n2q3l;5iubh235'

[].slice.call(s)
    .sort()
    .join('')
    .match(/(.)\1*/g)
    .map(item => [item[0], item.length])
    .sort((x,y)=>y[1]-x[1])[0]
怪我咯
var a = 'xiaomingxiaowangzhangshanlisi';

var result = a.split('').reduce(function (map, next) {
  if (map[next]) {
    map[next] += 1;
  } else {
    map[next] = 1;
  }
  return map;
}, {});

var max = {
  key: '',
  value: 0
};

for (var key in result) {
  if (result[key] > max.value) {
    max = {
      key: key,
      value: result[key]
    };
  }
}

console.log(result);
console.log(max);
黄舟
'xiaomingxiaowangzhangsihanlisiiii'.split('').sort().join('').match(/^|(.)\1*/g).sort(function(a, b){return b.length - a.length})[0][0]

如果要一行代码的话,必须二次排序,或者用他们那个循环的版本。

此代码兼容IE6+,包括空字符串兼容,他们match没有考虑空字符串,会报错。

阿神
var a = 'xiaomingxiaowangzhangshanlisi'

var obj = {};

for(var i = 0;i<a.length;i++){
    var _current = a.slice(i,i + 1);
    if(obj[_current]){
        obj[_current] += 1
    }else{
        obj[_current] = 1
    }
}

for(var key in obj){
    console.log(key,obj[key]);
}
黄舟
var a = 'xiaomingxiaowangzhangshanlisi';
var d = {};
for (var i = 0; i < a.length; i++){
    if (d[a[i]] == undefined) d[a[i]] = 0;
    d[a[i]]++;
}
var max = 0;
var char = "";
for (var key in d) {
    if (d[key] > max) {
        max = d[key];
        char = key;
    }
}
console.log(char, max);

只用最大我就不排序了。。

PHP中文网
var obj = {}
'xiaomingxiaowangzhangshanlisi'.replace(/(\w)/g,function(word,p){
    obj[p[0]] ? obj[p[0]]+=1 : obj[p[0]] =1 
})
console.log(obj)
迷茫

来一个一行版

'xiaomingxiaowangzhangshanlisi'.split('').sort(function(a,b){return a>b?1:a<b?-1:0}).join('').replace(/(.)\1*/g,function(match){return match[0] + match.length}).split(/(?=[a-z])/).sort(function(a,b){return b.slice(1)-a.slice(1)})

当然效率不如上面各位

阿神

我也回答一个,需要ES6。
我喜欢用reduce,所以:

var tmp = {foo: 0};
for (var ch of a) {
  (ch in tmp) ? tmp[ch]++ : tmp[ch] = 1;
}

var r = Object.keys(tmp).reduce((ch1, ch2)=> tmp[ch1] > tmp[ch2] ? ch1 : ch2, 'foo');
console.log(r); // 结果在此
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号