javascript - 面试题:用js实现读取出字符串中每个字符重复出现的次数?
黄舟
黄舟 2017-04-11 11:19:01
[JavaScript讨论组]

如字符串arr="abcdaabc",请用js读取出arr字符串中每个字母重复出现的次数分别是多少?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(20)
天蓬老师

坐等更好方案:

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 }
ringa_lee

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)
ringa_lee
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}

不是最优,只是提供另一个思路,兼容所有浏览器。

PHPz

@leftstick 的方案无可挑剔,但有些花哨了,对理解基本的原理不是最佳选择

那我就把它翻译成 plain js 吧

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}
迷茫
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);

不是最简洁的,期待更好的答案。

PHPz
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]);
    }
}
PHPz
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]);
}
PHP中文网

大家的方法都大同小异,期待见到更好的想法 =v=

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;
    }
}
ringa_lee
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);
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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