国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

三道關(guān)于字符串的JavaScript面試題解析

Sourcelink / 2797人閱讀

摘要:方法二生成統(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

相關(guān)文章

  • 【轉(zhuǎn)載】十三道JavaScript基礎(chǔ),你是否都做對(duì)了?

    摘要:題目二答案會(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)大家指正。 題目...

    raoyi 評(píng)論0 收藏0
  • 幾道前端面試小記

    摘要:全局環(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ù)組? 方法有好多,比...

    tulayang 評(píng)論0 收藏0
  • 幾道前端面試小記

    摘要:全局環(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ù)組? 方法有好多,比...

    yhaolpz 評(píng)論0 收藏0
  • 幾道前端面試小記

    摘要:全局環(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ù)組? 方法有好多,比...

    ChanceWong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<