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