題目如下 統計一串字符串中每個字符出現的頻率
示例字符串
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'
小白寫法
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
for (let i = 0; i < str.length; i++) {if (result[str[i]]) {result[str[i]]++;}else {result[str[i]] = 1;}
}
console.log(result);
但是這種寫法明顯丑陋不堪,代碼量太多了,一點也不像卷狗寫的代碼
我們可以試著改進一下,使用數組的foreach
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
str.split('').forEach(function (item) {if (result[item]) {result[item]++} else {result[item] = 1}
});
console.log(result);
如上,雖然這樣也能寫出來發,但是這種代碼都看能得懂,一點也不酷,作為卷狗,就是得寫的別人看不懂
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
// 使用reduce統計字符串中每個字符出現的次數
str.split('').reduce((pre, cur) => {if (pre[cur]) {pre[cur]++;} else {pre[cur] = 1;}return pre;
}, result);
console.log(result);
如上,reduce這個用的人比較少,應該能讓一部分看不懂但是還是有風險
所以再加上es6的語法保險一些
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = {};
str.split('').reduce((pre, cur) =>(pre[cur]++ || (pre[cur] = 1), pre), result);
console.log(result);
不對不對,我都用es6寫法了,我還整啥對象?我用map啊,哇,還是一行了耶,性能更好了,看起來更酷了呢
let str = 'asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd'let result = str.split('').reduce((pre, cur) =>pre.set(cur, (pre.get(cur) || 0) + 1), new Map())
console.log(result)
沒別的意思,只是想卷死在座的各位,或者被在坐的各位卷死,有沒有比我還要卷的
耗時5.133ms