1. 程式人生 > >JS 如何知道一串字串中每個字母出現的次數?

JS 如何知道一串字串中每個字母出現的次數?

var arrString = 'abcdaabddcca';
arrString.split('').reduce(function (prev, curr) {
    prev[curr] ? prev[curr]++ : prev[curr] = 1;
    return prev;
}, []);
// [a: 4, b: 2, c: 3, d: 3]
var prev = [];
var curr = 'a';
prev[curr] = 1;
prev // [a: 1] 
prev.length // 0
prev[curr]++
prev // [a: 2]


 
雖然計算了 重複次數  但 prev = [a:2] 是無效呢還是不無效  


瀏覽器的控制面板直接敲 [a:2] 立馬報錯呢

 

 


var arrString = 'abcdaabddcca';
arrString.split('').reduce(function (prev, curr) {
    prev[curr] ? prev[curr]++ : prev[curr] = 1;
    return prev;
}, {});
{a: 4, b: 2, c: 3, d: 3}

其實只要初始化資料 定義 prev 為{} 就比初始化 【】 有效   ,這也算是 reduce 優先解決辦法吧
 

歡迎交流哦!!!

 

基本概念
reduce()方法接受一個函式作為累加器(accumulator),陣列中的每個值(從左到右)開始縮減,最終為一個值

reduce為陣列中的每個元素依次執行回撥函式,不包括陣列中被刪除或從未被賦值的元素,接受四個引數:初始值(或者上一次回撥函式的返回值)

當前元素值,當前索引,呼叫reduce的陣列

語法
arr.reduce(callback,[initialValue])

callback(執行陣列中每個值的函式,包含四個引數)        
previousValue(上一次呼叫回撥函式返回的值,或者是提供的初始值(initialValue))
currentValue(陣列中當前被處理的元素)
index(當前元素在陣列中的索引)
array(呼叫reduce的陣列)           
initialValue(作為第一次呼叫callback的第一個引數,也就是初始值)

var dis = {
    math: 0.5,
    chinese: 0.3,
    english: 0.2
};
var sum = result.reduce(function (prev, curr) {
    return curr.score + prev;
}, -10);
var qsum = result.reduce(function (prev, curr) {
    return curr.score * dis[curr.subject] + prev;
}, 0); 
 
// JS 物件取值的方法有兩種
var obj = {a: 1, b: 4};
第一種
obj.a  // 1
第二種
obj['a'] // 1
第一種效能上優於第二種,但是第一種不能動態取值,第二種中括號裡面可以是變數,也可以配合模板字串使用`${key}`
var c = 'a';
obj[c] // 1