摘要:方法二生成統計次數字符最多的是,出現了次點評稍微好一點。問題三題目如何給字符串加千分符例如方法一轉換的方法轉化為數組最終的結果點評將字符串轉化為數組,然后對其切分重組。
分享幾道js面試題,自己感覺還是挺重要的,當看到題目的時候希望大家先花幾秒鐘考慮一下,
然后在看答案。如果有比較好的解法,歡迎大家留言指正,謝謝大家!
題目: 寫一個字符串轉換成駝峰的方法?
例如:border-bottom-color -> borderBottomColor
方法一let str = "border-bottom-color"; function change(val){ // 用‘-’切分成一個數組 let arr = val.split("-"); // 首字符大寫 for(let i = 1; i < arr.length; i++){ arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1); } // 將字符串拼接后返回 return arr.join(""); }
點評: 這種方法雖然可以實現,但還是太LOW了,一點都不簡潔。
方法二let str = "border-bottom-color"; function change(val){ return str.split("-").reduce((prev,cur,index) => { return prev + cur.charAt(0).toUpperCase()+cur.substring(1); }); }
點評: 這種方法使用了數組的 reduce() 方法,稍微簡潔了一點點,但還是不夠好。
方法三let str = "border-bottom-color"; function change(val){ // 定義正則表達式 let re = /-(w)/g; return str.replace(re,($0,$1) => { return $1.toUpperCase(); }); }
點評: 第三種方法使用正則表達式,效果還是不錯的。
備注:
replace()方法的第二個參數可以是一個函數:
參數一:$0 正則的整體 -b -c
參數二:$1 正則當中子項的第一個(用括號括起來的就叫做子項) b c
題目: 查找字符串中出現最多的字符和個數?
例如:abbcccffffddd -> 字符最多的是d,出現了5次
方法一let str = "abbcccffffddd"; let obj = {}; // 生成obj對象 for(let i = 0;i < str.length; i++){ let cur = str[i]; // 當前字符 if(!obj[ cur ]){ obj[ cur ] = []; } obj[ cur ].push(cur); } // 統計次數 let num = 0; let char = ""; for(item in obj){ if(num < obj[item].length){ num = obj[item].length; char = obj[item][0]; } } console.log(`字符最多的是${char},出現了${num}次`);
點評: 雖然能實現,但是太麻煩。
方法二let str = "abbcccffffddd"; // 生成obj let obj = str.split("").reduce((prev,cur) => { prev[cur] ? prev[cur]++ : prev[cur] = 1; return prev; },{}); // {a: 1, b: 2, c: 3, d: 5} let num = 0; let char = ""; // 統計次數 for(item in obj){ if(num < obj[item]){ num = obj[item]; char = item; } } console.log(`字符最多的是${char},出現了${num}次`);
點評: 稍微好一點。仍然是使用 reduce() 這個方法。
哈哈,萬能的 reduce 。
let str = "abcabcabcbbccccc"; let num = 0; let char = ""; // 使其按照一定的次序排列 str = str.split("").sort().join(""); // "aaabbbbbcccccccc" // 定義正則表達式 let re = /(w)1+/g; str.replace(re,($0,$1) => { if(num < $0.length){ num = $0.length; char = $1; } }); console.log(`字符最多的是${char},出現了${num}次`);
點評: :使用正則表達式總是那么簡單。
問題三題目: 如何給字符串加千分符?
例如:42342342342 -> 42,342,342,342
方法一let str = "12312345678988"; // 轉換的方法 function change(str){ // 轉化為數組 var arr = str.split(""); var result = []; while(arr.length > 3){ result.push(arr.splice(-3,3).join("")); } result.push(arr.join("")); // 最終的結果 return result.reverse().join(","); }
點評: :將字符串轉化為數組,然后對其切分重組。
方法二let str = "12312345678988"; function change(str){ // 僅僅對位置進行匹配 let re = /(?=(?!)(d{3})+$)/g; return str.replace(re,","); }
點評: :這個正則表達式就有點屌了。
(?=) : 前向聲明
(?!) : 反前向聲明
舉個小栗子
var str = "abacad"; var re = /a(?=b)/g; str.replace(re,"*"); // 結果:"*bacad" // 將a后邊為‘b’的a替換為‘*’號 var re = /a(?!b)/g; str.replace(re,"*"); // 結果:"ab*c*d" // 將a后邊不為‘b’的a替換為‘*’號
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93658.html
摘要:題目二答案會報錯未定義這段代碼中混合了函數聲明和函數表達式的形式,而函數實際上是綁定到了上而不是。除此之外函數聲明與函數表達式的語法其實是等價的。因此,在外層函數函數體內的兩個函數聲明,都會提升到之前執行。 這是我在Javascript微信公眾號上看到的一篇文章,覺得挺有意思的,所以轉載過來跟大家分享一下,同時,對這些題目也加上了一些我個人的理解,如果有不對的地方,請大家指正。 題目...
摘要:全局環境調用函數的對象實際為,所以函數內的指向構造函數通過構造函造函數生成了一個新對象,指向這個新對象。學習前端一個月,上一周面試了大概多家,收獲的卻是寥寥。為了效率,前端各方面的內容都有涉獵,深度卻相當不足,面試時暴露各種問題。 最近面試了不少家,苦于前端經驗薄弱,被各種血虐。做了不少家面試題,把各種不會的回來再做一遍,作為經驗總結吧。 1.如何最優性能去重一個數組? 方法有好多,比...
閱讀 3734·2021-10-15 09:42
閱讀 2594·2021-09-03 10:50
閱讀 1628·2021-09-03 10:28
閱讀 1788·2019-08-30 15:54
閱讀 2510·2019-08-30 12:46
閱讀 401·2019-08-30 11:06
閱讀 2818·2019-08-30 10:54
閱讀 521·2019-08-29 12:59