單行程式碼演算法解答
在實際工作當中,我們常常需要對資料進行處理,比如簡單的陣列元素相加,字串的倒序排列等等。如果使用C語言來解答此類問題,我們需要用到一些底層的演算法邏輯,使用基礎的for迴圈和if判斷等來解決。但是,在JS這門語言中,它本身就給我們提供了很多處理字串和陣列等資料結構的函式方法,這給我們解決此類問題帶來了很多便利,下面我就以幾個簡單的例子來為大家展示如何使用單行程式碼解答演算法。
1. 獲取最大值和最小值
編寫函式
highAndLow()
, 獲取數字組成的字串中的最大值和最小值,用空格隔開並返回,要求實現以下結果:
highAndLow("1 2 3 4 5"); // "5 1"
highAndLow("1 2 -3 4 5"); // "5 -3"
highAndLow("1 9 3 4 -5"); // "9 -5"
一行程式碼解答:
let highAndLow = (numbers) => `${Math.max(...numbers.split(' '))} ${Math.min(...numbers.split(' '))}`;
演算法解析:
numbers.split(' ') —— 用於將字串拆分為陣列
...numbers.split(' ') —— 【ES6語法】擴充套件運算子(...),用於將陣列展開,展開的每一項作為引數傳入Math.max()中
Math.max() 和 Math.min() —— 分別用於求解陣列項的最大值和最小值
${} —— 【ES6語法】模板字串,用於在字串(用反引號`引用)中寫入變數
2. 單詞首字母大寫
編寫函式
toJadenCase()
, 將英語句子中每個單詞首字母改為大寫,要求實現以下結果:
var str = "how can mirrors be real if our eyes aren't real";
console.log(str.toJadenCase()); // "How Can Mirrors Be Real If Our Eyes Aren't Real"
一行程式碼解答:
String.prototype.toJadenCase = function(){ return this.replace(/(^|\s)[a-z]/g, x => x.toUpperCase()) };
演算法解析:
/(^|\s)[a-z]/g —— 正規表示式,其中 ^ 表示字串起始位置,\s 表示空格,[a-z] 表示單個小寫字母,g 表示全域性匹配
toUpperCase() —— 用於將字串轉換為大寫
replace() —— 用於字串的替換,更多用法可參見 → 簡述test()、match()、replace()和search()的用法
3. 駝峰式命名轉換
編寫函式
toCamelCase()
, 實現駝峰式命名轉換,要求實現以下結果:
toCamelCase("") // ""
toCamelCase("the-stealth-warrior") // "theStealthWarrior"
toCamelCase("The_Stealth_Warrior") // "TheStealthWarrior"
一行程式碼解答:
let toCamelCase = str => str.replace(/(\-|_)([a-z]|[A-Z])/g, w => w.toUpperCase().slice(1));
演算法解析:
/(-|_)([a-z]|[A-Z])/g —— 正規表示式,其中 \- 表示字元 -(加反斜槓是用來轉義,因為短橫槓 - 為正則元字元),[a-z] 表示單個小寫字母,[A-Z] 表示單個大寫寫字母,g 表示全域性匹配
slice() —— 用於字串的裁剪,具體用法詳見 → JavaScript字串“三劍客”
4. 句子中最短的單詞長度
編寫函式
findShort()
, 獲取英文句子中最短單詞的長度,要求實現以下結果:
findShort("bitcoin take over the world maybe who knows perhaps") // 3
findShort("turns out random test cases are easier than writing out basic ones") // 3
一行程式碼解答:
let findShort = s => Math.min(...s.split(" ").map(s => s.length));
演算法解析:
map() —— 用於遍歷處理陣列元素,這裡是將陣列元素全部轉換為陣列元素字串長度
5. 求平均數
編寫函式
getAverage()
, 求解陣列中所有項的平均數,最終將該平均數向下取整作為函式返回值,要求實現以下結果:
getAverage([2,2,2,2]) // 2
getAverage([1,2,3,4,5,]) // 3
getAverage([1,1,1,1,1,1,1,2]) // 1
一行程式碼解答:
let getAverage = marks => Math.floor(marks.reduce((prev,cur) => prev + cur) / marks.length);
演算法解析:
reduce() —— 用於歸併處理陣列元素,這裡是將所有陣列元素相加,具體用法詳見 → 淺談JS中 reduce() 的用法
Math.floor() —— 用於數字向下取整
-- End --
更多有趣演算法解答,歡迎關注微信公眾號:前端微站
相關文章
- 15行Python程式碼,幫你理解令牌桶演算法Python演算法
- 40行程式碼實現React核心Diff演算法行程React演算法
- 【演算法】排序04——程式碼簡約而不簡單的希爾排序(含程式碼實現)演算法排序
- 60行程式碼實現簡單模板語法行程
- 從簡單程式碼入手,分析執行緒池原理執行緒
- 程式碼簽名、驅動簽名的常見問題解答
- 單窗演算法的地表溫度反演:谷歌地球引擎GEE程式碼演算法谷歌
- 15行Python程式碼搞定網易雲熱門歌單Python
- 如果利用 python 對 java 程式碼進行 單元測試?PythonJava
- 61行程式碼構建最簡單區塊鏈行程區塊鏈
- 64行程式碼實現簡單人臉識別行程
- 用6行Python程式碼實現選擇性排序演算法Python排序演算法
- 關於反射的導致panic的一段程式碼,求解答反射
- 程式碼執行
- 陪玩小程式原始碼,不容錯過的加密演算法整理清單原始碼加密演算法
- 20行程式碼寫一個簡單 Blazor 時鐘元件行程Blazor元件
- 簡單的linux Oops定位到bug程式碼行操作實踐LinuxOOP
- 8行程式碼實現快速排序,簡單易懂圖解!行程排序圖解
- 使用FakeAsync對Angular非同步程式碼進行單元測試Angular非同步
- C語言簡單程式碼程式C語言
- 面試不再怕,20行Python程式碼幫你搞懂LRU演算法面試Python演算法
- nms 演算法演示(附程式碼)演算法
- 20行程式碼實現,使用Tarjan演算法求解強連通分量行程演算法
- 使用gtest進行自己的單獨測試的程式碼介紹
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- 演算法專題 | 10行程式碼實現的最短路演算法——Bellman-ford與SPFA演算法行程
- 簡單的程式碼生成工具
- 資料預處理速度高倍提升,3行python程式碼簡單搞定!Python
- 不到40行 Python 程式碼打造一個簡單的推薦系統Python
- win10疑難解答錯誤程式碼0x80070002怎麼解決Win10
- 使用CountDownLatch或迴圈屏障對多執行緒程式碼進行單元測試 -XebiaCountDownLatch執行緒
- oracle執行java程式碼OracleJava
- 統計程式碼行數
- 菜鳥必看的排序演算法(簡單通俗)及程式碼實現,幾張圖帶你吃透排序演算法排序演算法
- 80行Python程式碼搞定全國區劃程式碼Python
- Java程式設計師面試題及解答Java程式設計師面試題
- Python程式設計常見問題與解答Python程式設計
- 淺談網路爬蟲中深度優先演算法和簡單程式碼實現爬蟲演算法