前端刷題 —— 磐郏客網(wǎng)前端題庫(kù)60道詳解(六)

目錄

  • 引言

    1. 乘法 (入門)
    2. 改變上下文 (入門)
    3. 批量改變對(duì)象的屬性 (入門)
    4. 屬性遍歷 (簡(jiǎn)單)
    5. 判斷是否包含數(shù)字 (入門)
    6. 檢查重復(fù)字符串 (簡(jiǎn)單)
    7. 判斷是否以元音字母結(jié)尾 (入門)
    8. 獲取指定字符串 (簡(jiǎn)單)
    9. 判斷是否符合指定格式 (簡(jiǎn)單)
    10. 判斷是否符合 USD 格式 (中等)

引言

盘箍担客網(wǎng)這個(gè) 前端筆試題庫(kù)寞蚌,可以說(shuō)這60道是最基礎(chǔ)的了珠增,也是考察的東西比較雜杂拨,有時(shí)間4天差不多就可以刷完,鞏固基礎(chǔ)還是有些用的补胚。做完題回顧一上午就可以過(guò)完一遍÷肽停現(xiàn)在我結(jié)合我的答案和參考的其他人的答案,在這里做一個(gè)總結(jié)溶其,也是自己知識(shí)的整理結(jié)果骚腥。

51. 乘法

題目描述
求 a 和 b 相乘的值,a 和 b 可能是小數(shù)昔汉,需要注意結(jié)果的精度問(wèn)題
輸入:3, 0.0001
輸出:0.0003

// 方法一:確定小數(shù)的位數(shù)然后保證精度是多少位
function multiply(a, b) {
    let arrA = a.toString().split('.')[1] || ''
    let arrB = b.toString().split('.')[1] || ''
    let fix = arrA.length + arrB.length
    return (a * b).toFixed(fix)
}

// 方法二:自己寫(xiě)的
function multiply(a, b) {
    let arrA = a.toString().split('.')
    let arrB = b.toString().split('.')
    let count = 0
    // 第一個(gè)有小數(shù)位
    if(arrA[1]) {
        count+=arrA.length
        a = a * Math.pow(10,arrA.length)
    }
    // 第二個(gè)數(shù)有小數(shù)位
    if(arrB[1]) {
        count+=arrB.length
        b = b * Math.pow(10,arrB.length)
    }
    return a * b * Math.pow(10, -count)
}

相關(guān)知識(shí)點(diǎn):

  • javascript小數(shù)精度問(wèn)題

javascript的數(shù)值存儲(chǔ)是雙精度浮點(diǎn)數(shù)64位懈万,根據(jù)IEEE 754標(biāo)準(zhǔn),0-51為值靶病,52-62位指數(shù)钞速,63位是符號(hào)位。
二進(jìn)制浮點(diǎn)數(shù)表示法對(duì)0.1這樣的有誤差嫡秕。
解決方法就是先升冪再降冪。

52. 改變上下文

題目描述
將函數(shù) fn 的執(zhí)行上下文改為 obj苹威,返回 fn 執(zhí)行后的值
輸入:
alterContext(function() {return this.greeting + ', ' + this.name + '!'; }, {name: 'Rebecca', greeting: 'Yo' })
輸出:Yo, Rebecca!

// 方法一:call
function alterContext(fn, obj) {
    return fn.call(obj)
}

// 方法一:apply
function alterContext(fn, obj) {
    return fn.apply(obj)
}

// 方法一:bind
function alterContext(fn, obj) {
    return fn.bind(obj)()
}

相關(guān)知識(shí)點(diǎn):

  • call/apply/bind

53. 批量改變對(duì)象的屬性

題目描述
給定一個(gè)構(gòu)造函數(shù) constructor昆咽,請(qǐng)完成 alterObjects 方法,將 constructor 的所有實(shí)例的 greeting 屬性指向給定的 greeting 變量牙甫。
輸入:

var C = function(name) {this.name = name; return this;};   
var obj1 = new C('Rebecca');   
alterObjects(C, 'What\'s up'); obj1.greeting;  

輸出:What's up

// 方法一:原型對(duì)象上添加屬性
function alterObjects(constructor, greeting) {
    constructor.prototype.greeting = greeting
}

相關(guān)知識(shí)點(diǎn):

  • 原型鏈

54. 屬性遍歷

題目描述
找出對(duì)象 obj 不在原型鏈上的屬性(注意這題測(cè)試?yán)拥拿疤?hào)后面也有一個(gè)空格~)
1掷酗、返回?cái)?shù)組,格式為 key: value
2窟哺、結(jié)果數(shù)組不要求順序
輸入

var C = function() {this.foo = 'bar'; this.baz = 'bim';}; 
C.prototype.bop = 'bip'; 
iterate(new C());

輸出 ["foo: bar", "baz: bim"]

// 方法一: forEach換成map更好泻轰,這里不是重點(diǎn)所以不做處理
function iterate(obj) {
    let arr = []
    Object.getOwnPropertyNames(obj).forEach(value => arr.push(`${value}: ${obj[value]}`))
    return arr
}

相關(guān)知識(shí)點(diǎn):

  • Object.getOwnPropertyNames(obj), 獲取所有的對(duì)象自身屬性

55. 判斷是否包含數(shù)字

題目描述
給定字符串 str且轨,檢查其是否包含數(shù)字浮声,包含返回 true,否則返回 false
輸入: 'abc123' ; 輸出: true

// 方法一:字符串比較ASCII碼
function containsNumber(str) {
    for (let i = 0; i < str.length; i++) {
        if(str[i] >= '0' && str[i] <= '9') {
            return true
        }
    }
    return false
}

// 方法二:隱式類型轉(zhuǎn)化
function containsNumber(str) {
    for (let i = 0; i < str.length; i++) {
        if(str[i] >= 0 || str[i] <= 9) {
            return true
        }
    }
    return false
}

// 方法三:正則
function containsNumber(str) {
    return /\d/g.test(str)
}

相關(guān)知識(shí)點(diǎn):

  • 字符串比較ASCII碼

字符串比較會(huì)比較他們的ASCII碼值旋奢,數(shù)字是連續(xù)的ASCII碼泳挥,0123456789分別是48-57,在這個(gè)范圍內(nèi)的就可以至朗。

  • 隱式類型轉(zhuǎn)化

數(shù)字字符串和數(shù)字比較屉符,會(huì)隱式轉(zhuǎn)化成數(shù)字,字符串和數(shù)字比較,會(huì)轉(zhuǎn)化成數(shù)字NaN矗钟,和數(shù)字比較返回false唆香,所以這種方式也可以找到字符串中是否有數(shù)字。

  • 正則

56. 檢查重復(fù)字符串

題目描述
給定字符串 str吨艇,檢查其是否包含連續(xù)重復(fù)的字母(a-zA-Z)躬它,包含返回 true,否則返回 false
輸入: 'rattler'
輸出: true

// 方法一:雙指針
function containsRepeatingLetter(str) {
    // 如果字符串長(zhǎng)度小于2直接返回false
    if(str.length < 2)return false
    // 左右指針
    let left = 0
    let right = 1
    while(str[right]) {
        // 如果左右相等且都是a-z范圍的就返回true
        if(str[left++] === str[right++] && str[left].toLowerCase() >= 'a' && str[left].toLowerCase() <= 'z' && str[right].toLowerCase() >= 'a' && str[right].toLowerCase() <= 'z'){
            return true
        }
    }
    // 否則返回false
    return false
    
}

// 方法二:正則虑凛,小括號(hào)表示分組,\1表示引用第一個(gè)分組
function containsRepeatingLetter(str) {
    return /([a-zA-Z])\1/.test(str);
}

相關(guān)知識(shí)點(diǎn):

  • 雙指針(算法思維)
  • 正則

57. 判斷是否以元音字母結(jié)尾

題目描述
給定字符串 str软啼,檢查其是否以元音字母結(jié)尾
1桑谍、元音字母包括 a,e祸挪,i锣披,o,u贿条,以及對(duì)應(yīng)的大寫(xiě)
2雹仿、包含返回 true,否則返回 false
輸入: 'gorilla' ; 輸出: true

// 方法一:indexOf
function endsWithVowel(str) {
    return ['a','e','i','o','u'].indexOf(str.slice(-1).toLowerCase()) === -1 ? false: true
}

// 方法二:includes
function endsWithVowel(str) {
    return ['a','e','i','o','u'].includes(str.slice(-1).toLowerCase())
}

相關(guān)知識(shí)點(diǎn):

  • 字符串方法slice整以,toLowerCase
  • 數(shù)組方法indexOf胧辽,includes

58. 獲取指定字符串

題目描述
給定字符串 str,檢查其是否包含 連續(xù)3個(gè)數(shù)字
1公黑、如果包含邑商,返回最先出現(xiàn)的 3 個(gè)數(shù)字的字符串
2、如果不包含凡蚜,返回 false
輸入: '9876543'
輸出: 987

PS: 這個(gè)題我們理解的是三個(gè)連續(xù)遞增的數(shù)字人断,但是題的意思是連續(xù)的數(shù)字即可。

// 方法一:計(jì)數(shù)器
function captureThreeNumbers(str) {
  let start = 0
  let count = 0
  for(let i = 0; i < str.length; i++) {
    if (!isNaN(str[i])) {
      count++
    } else {
      count = 0
      start = i+1
    }
  }
  
  return count >= 3 ? str[start]+str[start+1]+str[start+2] : false
}

// 方法二:正則 match可以得到匹配的結(jié)果
function captureThreeNumbers(str) {
  let arr = str.match(/\d{3}/)
  return arr ? arr[0] : false
}

如果是連續(xù)遞增的數(shù)字朝蜘,要這樣實(shí)現(xiàn):

// 方法一:雙指針
function captureThreeNumbers(str) {
    let left = 0
    let right = 0
    while(str[right+1] !== undefined) {
        // 保證右指針連續(xù)恶迈,且屬于數(shù)字,右指針往過(guò)移動(dòng)
        if(Math.abs(str[right+1] - str[right]) === 1 && str[right] >=0 && str[right] <=9) {
            right++
        // 如果小于3谱醇,左指針就去右指針右邊
        }else if(right - left + 1 < 3){
            left = ++right
        // 大于3直接返回    
        }else {
            return str.substr(left,3)
        }
    }
    // 循環(huán)結(jié)果暇仲,如果大于3就返回,否則返回false
    return right - left + 1 >= 3 ? str.substr(left,3) : false
}

相關(guān)知識(shí)點(diǎn):

  • 計(jì)數(shù)器
  • 正則
  • 雙指針(算法思維) + 判斷連續(xù)數(shù)字

59. 判斷是否符合指定格式

題目描述
給定字符串 str副渴,檢查其是否符合如下格式
1熔吗、XXX-XXX-XXXX
2、其中 X 為 Number 類型
輸入:'800-555-1212'
輸出:true

// 方法一:正則
function matchesPattern(str) {
    return /^\d{3}-\d{3}-\d{4}$/.test(str)
}

相關(guān)知識(shí)點(diǎn):

  • 匹配或者判斷什么格式就優(yōu)先考慮正則

60. 判斷是否符合 USD 格式

題目描述
給定字符串 str佳晶,檢查其是否符合美元書(shū)寫(xiě)格式
1桅狠、以 $ 開(kāi)始
2、整數(shù)部分,從個(gè)位起中跌,滿 3 個(gè)數(shù)字用 , 分隔
3咨堤、如果為小數(shù),則小數(shù)部分長(zhǎng)度為 2
4漩符、正確的格式如:$1,023,032.03 或者 $2.03一喘,
錯(cuò)誤的格式如:$3,432,12.12 或者 $34,344.3
輸入:'$20,933,209.93'
輸出:true

// 方法一:正則,從左往右寫(xiě)嗜暴,依次匹配
function isUSD(str) {
    return /^\$[\d]{1,3}(\,[\d]{3})*(|\.[\d]{2})$/.test(str)
}

相關(guān)知識(shí)點(diǎn):

  • 正則

已經(jīng)到底拉凸克,60道題完事,恭喜你闷沥,通關(guān)啦~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萎战,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舆逃,更是在濱河造成了極大的恐慌蚂维,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件路狮,死亡現(xiàn)場(chǎng)離奇詭異虫啥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奄妨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涂籽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人砸抛,你說(shuō)我怎么就攤上這事又活。” “怎么了锰悼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)团赏。 經(jīng)常有香客問(wèn)我箕般,道長(zhǎng),這世上最難降的妖魔是什么舔清? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任丝里,我火速辦了婚禮,結(jié)果婚禮上体谒,老公的妹妹穿的比我還像新娘杯聚。我一直安慰自己,他們只是感情好抒痒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布幌绍。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傀广。 梳的紋絲不亂的頭發(fā)上颁独,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音伪冰,去河邊找鬼誓酒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贮聂,可吹牛的內(nèi)容都是我干的靠柑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吓懈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歼冰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起骄瓣,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤停巷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后榕栏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畔勤,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扒磁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庆揪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妨托,死狀恐怖缸榛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兰伤,我是刑警寧澤内颗,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站敦腔,受9級(jí)特大地震影響均澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜符衔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一找前、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧判族,春花似錦躺盛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)周叮。三九已至,卻和暖如春躯枢,著一層夾襖步出監(jiān)牢的瞬間则吟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工锄蹂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氓仲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓得糜,卻偏偏與公主長(zhǎng)得像敬扛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朝抖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355