字串中找最大值-一個面試題引發的一個文章
題目:寫一個函式,輸入一段合法的字元陣列(n<1024),請用JavaScript從字元陣列中找出最大的數值,比如(asc23423v234),得到的最大數值是23423。注意:數值為常用數值表達方式。(建議不要用正則,基本是死路)
部分測試用例:
1)輸入asc23423v234,輸出23423
2)輸入pppp12bbbbbb12.31cccc,輸出31
3)輸入54.4..6Ⅲ-44.4+++5-4,輸出54.4
解題:
function calcMaxNumber(str) { //轉成陣列 let arr = str.split(''); // 控制斷字 let bool = false; // 選取數字和.的正則 let regexp = /[\d|.]/i; let filterArr = []; //把連續數字和帶點的連續數字抽取成新的陣列 arr.reduce((resStr, value, index, arr) => { if (regexp.test(value)) { bool = true; if (index === arr.length - 1) { let str = resStr + value; return filterArr.push(str); } return resStr + value; } else { if (bool) { filterArr.push(resStr); } bool = false; return ''; } }, ''); // 對過濾的陣列中帶有.的項進行拆分 filterArr = filterArr.map(num => { if (num.includes('.')) { return handlePointStr(num); } else { return num; } }); //對有.的字串 進行處理 例如‘21.23.34’ 返回 [21.23,23.34,34] function handlePointStr(str) { let arr = str.split('.'); if (arr[arr.length - 1] == '') { arr.splice(arr.length - 1); } let newArr = []; for (i = 0; i < arr.length - 1; i++) { newArr.push(arr[i] + '.' + arr[i + 1]); } newArr.push(arr[arr.length - 1]); return newArr; } // 二維陣列進行扁平化 filterArr = filterArr.toString().split(','); return Math.max(...filterArr); console.table(filterArr); } let max = calcMaxNumber('54..4..6II44.4+++5-4'); console.log(max);