2019-06-10

JavaScript 1 + 1 ✧ 統計字母

## 題目 計算陣列中各個字母出現的次數。 ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t'] ## 思路 1. 建立一張空的資料表 (物件)。 2. 檢查原始資料中每一筆的字母是否在新資料中出現過。 3. 如果有,則統計數字 +1。 4. 如果沒出現過,建立該筆資料,且計數為 1。 5. 檢查完所有原始資料後,輸出統計結果。 ## 基本程式 ### 原始寫法 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const letterCount = {}; for (let i = 0; i < data.length; i++) { if (letterCount[data[i]]) { letterCount[data[i]] = letterCount[data[i]] + 1; } else { letterCount[data[i]] = 1; } } console.log(letterCount); ``` ### 變數優化 Hint:建立變數保管常用數值 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const letterCount = {}; for (let i = 0; i < data.length; i++) { const item = data[i]; if (letterCount[item]) { letterCount[item] = letterCount[item] + 1; } else { letterCount[item] = 1; } } console.log(letterCount); ``` ### 運算子優化 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const letterCount = {}; for (let i = 0; i < data.length; i++) { const item = data[i]; if (letterCount[item]) { letterCount[item] += 1; } else { letterCount[item] = 1; } } console.log(letterCount); ``` ### 三元運算子優化 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const letterCount = {}; for (let i = 0; i < data.length; i++) { const item = data[i]; letterCount[item] = letterCount[item] ? letterCount[item] + 1 : 1 ; } console.log(letterCount); ``` ### 三元運算子變形 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const letterCount = {}; for (let i = 0; i < data.length; i++) { const item = data[i]; letterCount[item] ? (letterCount[item] += 1) : (letterCount[item] = 1); } console.log(letterCount); ``` ### 結果輸出 ``` { L: 1, o: 4, r: 10, e: 17, m: 6, i: 17, p: 9, s: 10, u: 6, d: 5, l: 5, t: 11, a: 10, c: 6, n: 5, g: 2, A: 1, q: 1, h: 1 } ``` ## 進階處理 ### 概念 針對資料進行排序,使呈現結果接近一般使用者閱讀習慣。 Hint:需拷貝一份原始資料,以免在資料操作時影響到原始資料。 ### 程式 ``` const data = ['L','o','r','e','m','i','p','s','u','m','d','o','l','o','r','s','i','t','a','m','e','t','c','o','n','s','e','c','t','e','t','u','r','a','d','i','p','i','s','i','c','i','n','g','e','l','i','t','A','d','c','u','l','p','a','m','a','g','n','a','m','p','r','a','e','s','e','n','t','i','u','m','e','t','q','u','a','s','i','s','t','e','r','e','p','r','e','h','e','n','d','e','r','i','t','p','e','r','s','p','i','c','i','a','t','i','s','i','u','r','e','a','d','i','p','i','s','c','i','r','e','p','e','l','l','a','t']; const data2 = [...data].sort(); const letterCount = {}; for (let i = 0; i < data2.length; i++) { const item = data2[i]; letterCount[item] ? (letterCount[item] += 1) : (letterCount[item] = 1); } console.log(letterCount); ``` ### 結果輸出 ``` { A: 1, L: 1, a: 10, c: 6, d: 5, e: 17, g: 2, h: 1, i: 17, l: 5, m: 6, n: 5, o: 4, p: 9, q: 1, r: 10, s: 10, t: 11, u: 6 } ```