亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript 特有方法計(jì)算二進(jìn)制中1的個(gè)數(shù) split方法

 更新時(shí)間:2010年05月06日 11:40:33   作者:  
這是一道網(wǎng)上看到的前端的筆試題,主要思想是利用JavaScript的toString方法將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制的字符串。然后for循環(huán)遍歷計(jì)算字符串中”1″出現(xiàn)的次數(shù)。
代碼如下:
復(fù)制代碼 代碼如下:

function g(n){
var n = n.toString(2);
var count = 0;
for(var i=0;i<n.length;i++)
{
if(n[i] == "1")
count++;
}
return count;
}

覺得這樣寫很麻煩,突然想到是不是可以利用js的split方法來實(shí)現(xiàn)計(jì)算1的個(gè)數(shù),split的參數(shù)為正則\0*\,分離字符串中的1。代碼如下:
復(fù)制代碼 代碼如下:

function f(n){
return n.toString(2).split(/0*/).length;
}

這樣代碼就顯得很簡潔了。

只可惜測試了下兩種方法的效率,發(fā)現(xiàn)利用正則的split方法效率比較低,時(shí)間大概是for循環(huán)方法的2.5倍。

發(fā)現(xiàn)原來的代碼中有兩個(gè)錯(cuò)誤。

一是在IE下,字符串不能使用數(shù)組下標(biāo)訪問指定位置的值,只能采用charAt(index)的方法。

二是在Chrome和Opera下,split(\0*\)的方式計(jì)算出的1的個(gè)數(shù)在有些情況下會多1。

比如:12的二進(jìn)制值為1100,使用split(\0*\)的方式生成的數(shù)組為[1,1,]。也就是說,當(dāng)二進(jìn)制值不以1結(jié)尾時(shí),在最后都會生成一個(gè)空數(shù)組項(xiàng)(在IE和Firefox中沒有這個(gè)問題)。

思考后發(fā)現(xiàn),其實(shí)并不需要使用正則的方式來計(jì)算1的個(gè)數(shù),只要把1當(dāng)做split方法的參數(shù),把1作為分隔符,分出的數(shù)組的長度應(yīng)該是1的個(gè)數(shù)加1。
復(fù)制代碼 代碼如下:

function f(n){
return n.toString(2).split("1").length – 1;
}

這樣就不用采用正則的方法,也兼容了各主流瀏覽器,而且它的效率完全不低于使用for遍歷的方法。

相關(guān)文章

  • js switch case default 的用法示例介紹

    js switch case default 的用法示例介紹

    switch case default的用法應(yīng)該存在一部分人不會使用吧,其實(shí)很簡單就是每個(gè)case后,一定要加:break;default,就相當(dāng)于else,不會的朋友可以了解下
    2013-10-10
  • layDate日期控件使用方法詳解

    layDate日期控件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了layDate日期控件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 簡單實(shí)現(xiàn)js懸浮導(dǎo)航效果

    簡單實(shí)現(xiàn)js懸浮導(dǎo)航效果

    這篇文章主要教大家如何簡單實(shí)現(xiàn)js懸浮導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • js實(shí)現(xiàn)點(diǎn)擊向下展開的下拉菜單效果代碼

    js實(shí)現(xiàn)點(diǎn)擊向下展開的下拉菜單效果代碼

    這篇文章主要介紹了js實(shí)現(xiàn)點(diǎn)擊向下展開的下拉菜單效果代碼,涉及javascript鼠標(biāo)事件控制頁面元素樣式變換的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 有關(guān)js的變量作用域和this指針的討論

    有關(guān)js的變量作用域和this指針的討論

    在ECMAScript中,只有兩種執(zhí)行環(huán)境,全局環(huán)境和函數(shù)環(huán)境,每個(gè)函數(shù)都是一個(gè)執(zhí)行環(huán)境,包括嵌套函數(shù)。換句話說,其他情況下即使變量聲明在一對大括號中,在括號外部仍然可以訪問這些變量
    2010-12-12
  • js定時(shí)器實(shí)現(xiàn)倒計(jì)時(shí)效果

    js定時(shí)器實(shí)現(xiàn)倒計(jì)時(shí)效果

    這篇文章主要為大家詳細(xì)介紹了js定時(shí)器實(shí)現(xiàn)倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JS Replace 全部替換字符的用法小結(jié)

    JS Replace 全部替換字符的用法小結(jié)

    本篇文章主要是對JS Replace 全部替換字符的用法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Unicode 編碼轉(zhuǎn)換器

    Unicode 編碼轉(zhuǎn)換器

    Unicode 編碼轉(zhuǎn)換器...
    2007-01-01
  • JavaScript代碼模擬鼠標(biāo)自動點(diǎn)擊事件示例

    JavaScript代碼模擬鼠標(biāo)自動點(diǎn)擊事件示例

    這篇文章主要介紹了JavaScript代碼模擬鼠標(biāo)自動點(diǎn)擊事件示例,文章通過示例代碼和運(yùn)行效果圖介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JavaScript 組件之旅(三):用 Ant 構(gòu)建組件

    JavaScript 組件之旅(三):用 Ant 構(gòu)建組件

    我們走到哪兒了?前兩期思考了太多東西,你是否已有倦意?別擔(dān)心,本期的話題很輕松,你只需要簡單了解一些語法,寫幾行配置,就能驅(qū)使系統(tǒng)按你預(yù)設(shè)的方式自動完成一些工作。
    2009-10-10

最新評論