單行程式碼演算法解答
在實際工作當中,我們常常需要對資料進行處理,比如簡單的陣列元素相加,字串的倒序排列等等。如果使用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 --
更多有趣演算法解答,歡迎關注微信公眾號:前端微站
相關文章
- 30 行 Python 程式碼搞定 X 演算法Python演算法
- angularJS進行表單提交程式碼例項AngularJS
- js程式碼執行順序簡單介紹JS
- javascript程式碼執行機制簡單介紹JavaScript
- 40行程式碼實現React核心Diff演算法行程React演算法
- 【演算法】排序04——程式碼簡約而不簡單的希爾排序(含程式碼實現)演算法排序
- 蟻群演算法 matlab程式詳細解答-菜鳥也能看懂演算法Matlab
- 60行程式碼實現簡單模板語法行程
- 從簡單程式碼入手,分析執行緒池原理執行緒
- 15行Python程式碼,幫你理解令牌桶演算法Python演算法
- 程式碼簽名、驅動簽名的常見問題解答
- 競賽選手問題的解答演算法演算法
- 單窗演算法的地表溫度反演:谷歌地球引擎GEE程式碼演算法谷歌
- 15行Python程式碼搞定網易雲熱門歌單Python
- 61行程式碼構建最簡單區塊鏈行程區塊鏈
- 64行程式碼實現簡單人臉識別行程
- 關於反射的導致panic的一段程式碼,求解答反射
- Apriori演算法 java程式碼演算法Java
- 程式碼執行
- 幾種簡單的負載均衡演算法及其Java程式碼實現負載演算法Java
- 陪玩小程式原始碼,不容錯過的加密演算法整理清單原始碼加密演算法
- 使用FakeAsync對Angular非同步程式碼進行單元測試Angular非同步
- 如果利用 python 對 java 程式碼進行 單元測試?PythonJava
- 8行程式碼實現快速排序,簡單易懂圖解!行程排序圖解
- 51行程式碼實現簡單的PHP區塊鏈行程PHP區塊鏈
- 用 Mocha 和 Chai 對 JavaScript 程式碼進行單元測試AIJavaScript
- 點選刪除或者新增表格行簡單程式碼例項
- 用6行Python程式碼實現選擇性排序演算法Python排序演算法
- 面試不再怕,20行Python程式碼幫你搞懂LRU演算法面試Python演算法
- 怎樣估算軟體專案週期-程式碼行估演算法演算法
- C語言簡單程式碼程式C語言
- jQuery表單操作程式碼jQuery
- java簡單聊天程式碼Java
- nms 演算法演示(附程式碼)演算法
- 演算法導論FFT程式碼演算法FFT
- POJ 2718簡單列舉貪心演算法(好久沒寫程式碼了。。)演算法
- 使用gtest進行自己的單獨測試的程式碼介紹
- 焦點離開立刻進行表單驗證程式碼例項