JS 如何知道一串字串中每個字母出現的次數?
阿新 • • 發佈:2018-12-28
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