javascript讀取出字串中每個字元出現次數
阿新 • • 發佈:2019-01-26
檢測字元出現次數
如字串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);