常見JS編程題

1英遭、查找數(shù)組中重復(fù)元素

方法1:創(chuàng)建一個新的臨時數(shù)組來保存數(shù)組中已有的元素

function duplicates(arr) {
     //聲明兩個數(shù)組吁伺,a數(shù)組用來存放結(jié)果超凳,b數(shù)組用來存放arr中每個元素的個數(shù)
     var a = [],b = [];
     //遍歷arr,如果以arr中元素為下標(biāo)的的b元素已存在耕皮,則該b元素加1仑濒,否則設(shè)置為1
     for(var i = 0; i < arr.length; i++){
         if(!b[arr[i]]){
             b[arr[i]] = 1;
             continue;
         }
         b[arr[i]]++;
     }
     //遍歷b數(shù)組,將其中元素值大于1的元素下標(biāo)存入a數(shù)組中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
 }

方法2: 使用indexOf判斷數(shù)組元素第一次出現(xiàn)的位置是否為當(dāng)前位置

Array.prototype.unique3 = function(){
    var n = [this[0]]; 
    for(var i=1; i<this.length; i++)    //從第二項開始遍歷
    {
        //如果當(dāng)前數(shù)組元素在數(shù)組中出現(xiàn)的第一次的位置不是i
        //說明是重復(fù)元素
        if(this.indexOf(this[i]) == i){
            n.push(this[i]);
        }
    }
    return n;
}

方法3:先排序再去重

Array.prototype.unique4 = function(){
    this.sort(function(a, b){ return a - b;});
    var n = [this[0]];
    for(var i=1; i<this.length; i++){
        if(this[i] != this[i-1]){
            n.push(this[i]);
        }
    }
    return n;
}

2朝墩、求數(shù)組二次方

為數(shù)組 arr 中的每個元素求二次方茧跋。不要直接修改數(shù)組 arr矛辕,結(jié)果返回新的數(shù)組

function square(arr) {
    //聲明一個新的數(shù)組存放結(jié)果
    var a = [];
    arr.forEach(function(e){
        //將arr中的每一個元素求平方后罚拟,加入到a數(shù)組中
        a.push(e*e);
    });
    return a;
}

3、查找數(shù)組元素位置

在數(shù)組 arr 中愤兵,查找值與 item 相等的元素出現(xiàn)的所有位置

function findAllOccurrences(arr, target) {
     var a=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]===target){
            a.push(i);
        }
    }
    return a;
}

4、正確使用parseInt()

parseInt(string, radix)當(dāng)參數(shù) radix 的值為 0排吴,或沒有設(shè)置該參數(shù)時秆乳,parseInt() 會根據(jù) string 來判斷數(shù)字的基數(shù)。
舉例钻哩,如果 string 以 "0x" 開頭屹堰,parseInt() 會把 string 的其余部分解析為十六進制的整數(shù)。如果 string 以 0 開頭街氢,那么 ECMAScript v3 允許 parseInt() 的一個實現(xiàn)把其后的字符解析為八進制或十六進制的數(shù)字双藕。如果 string 以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進制的整數(shù)阳仔。

function parse2Int(num)
{
    return parseInt(num,10);
}

5、實現(xiàn)對象的深克隆

因為js中數(shù)據(jù)類型分為基本數(shù)據(jù)類型(number, string, boolean, null, undefined)和引用類型值(對象, 數(shù)組, 函數(shù)). 這兩類對象在復(fù)制克隆的時候是有很大區(qū)別的. 原始類型存儲的是對象的實際數(shù)據(jù), 而對象類型存儲的是對象的引用地址(對象的實際內(nèi)容單獨存放, 為了減少數(shù)據(jù)開銷通常放在內(nèi)存中). 此外, 對象的原型也是引用對象, 它把原型的屬性和方法放在內(nèi)存中, 通過原型鏈的方式來指向這個內(nèi)存地址.

于是克隆也會分為兩類:

  • 淺度克隆: 原始類型為值傳遞, 對象類型仍為引用傳遞
  • 深度克隆: 所有元素或?qū)傩跃耆珡?fù)制, 與原對象完全脫離, 也就是說所有對于新對象的修改都不會反映到原對象中
function clone(obj){
    if(typeof(obj)== 'object'){
        var result = obj instanceof Array ? [] : {};
        for(var i in obj){
            var attr = obj[i];
            result[i] = arguments.callee(attr);
        }
        return result;
    } else {
        return obj;
    }
};

6扣泊、回文判斷

方法1:

function isPalindrome(line) {
    line += "";
    return line === line.split("").reverse().join("");
}

方法2:從字符串頭部和尾部近范,逐次向中間檢測

function isPalindrome(line) {  
    line += "";  
    for(var i=0,j=line.length-1;i<j;i++,j--){  
        if(line.charAt(i) !== line.charAt(j)){  
            return false;  
        }  
    }  
    return true;  
}  

7、計時器

實現(xiàn)一個打點計時器延蟹,要求
1)從 start 到 end(包含 start 和 end)评矩,每隔 100 毫秒 console.log 一個數(shù)字,每次數(shù)字增幅為 1
2)返回的對象中需要包含一個 cancel 方法阱飘,用于停止定時操作
3)第一個數(shù)需要立即輸出

function count(start, end) {
  //立即輸出第一個值
  console.log(start++);
     var timer = setInterval(function(){
         if(start <= end){
             console.log(start++);
         }else{
             clearInterval(timer);
         }
     },100);
    //返回一個對象
     return {
         cancel : function(){
             clearInterval(timer);
         }
     };
 }

8斥杜、流程控制

實現(xiàn) fizzBuzz 函數(shù),參數(shù) num 與返回值的關(guān)系如下:
1沥匈、如果 num 能同時被 3 和 5 整除,返回字符串 fizzbuzz
2高帖、如果 num 能被 3 整除缰儿,返回字符串 fizz
3、如果 num 能被 5 整除散址,返回字符串 buzz
4乖阵、如果參數(shù)為空或者不是 Number 類型,返回 false
5预麸、其余情況瞪浸,返回參數(shù) num

function fizzBuzz(num) {
    var a = num % 3;
    var b = num % 5;
    if (a == 0 && b == 0) {
        return 'fizzbuzz';
    } else if (a == 0) {
        return 'fizz'
    } else if (b == 0) {
        return 'buzz'
    } else if (num == 'null' || typeof (num) != 'number') {
        return false
    } else {
        return num
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吏祸,隨后出現(xiàn)的幾起案子对蒲,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齐蔽,死亡現(xiàn)場離奇詭異两疚,居然都是意外死亡,警方通過查閱死者的電腦和手機含滴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門诱渤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谈况,你說我怎么就攤上這事勺美。” “怎么了碑韵?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵赡茸,是天一觀的道長。 經(jīng)常有香客問我祝闻,道長占卧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任联喘,我火速辦了婚禮华蜒,結(jié)果婚禮上豁遭,老公的妹妹穿的比我還像新娘。我一直安慰自己蓖谢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布闪幽。 她就那樣靜靜地躺著啥辨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盯腌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天腊嗡,我揣著相機與錄音,去河邊找鬼燕少。 笑死卡者,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的客们。 我是一名探鬼主播崇决,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恒傻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盈厘,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沸手,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跳仿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捐晶,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡惑灵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年畔塔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片把敢。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖桑阶,靈堂內(nèi)的尸體忽然破棺而出蚣录,到底是詐尸還是另有隱情萎河,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布昧港,位于F島的核電站创肥,受9級特大地震影響瓤的,放射性物質(zhì)發(fā)生泄漏吞歼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尿褪。 院中可真熱鬧杖玲,春花似錦摆马、人聲如沸囤采。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽激蹲。三九已至托呕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斟赚,已是汗流浹背拗军。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工发侵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刃鳄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像愉烙,于是被迫代替她去往敵國和親步责。 傳聞我的和親對象是個殘疾皇子禀苦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容