JavaScript 特有方法计算二进制中1的个数 split方法

 更新时间:2010年05月06日 11:40:33   作者:  
这是一道网上看到的前端的笔试题,主要思想是利用JavaScript的toString方法将十进制数转换为二进制的字符串。然后for循环遍历计算字符串中”1″出现的次数。
代码如下:
复制代码 代码如下:

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方法来实现计算1的个数,split的参数为正则\0*\,分离字符串中的1。代码如下:
复制代码 代码如下:

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

这样代码就显得很简洁了。

只可惜测试了下两种方法的效率,发现利用正则的split方法效率比较低,时间大概是for循环方法的2.5倍。

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

发现原来的代码中有两个错误。

一是在IE下,字符串不能使用数组下标访问指定位置的值,只能采用charAt(index)的方法。

二是在Chrome和Opera下,split(\0*\)的方式计算出的1的个数在有些情况下会多1。

比如:12的二进制值为1100,使用split(\0*\)的方式生成的数组为[1,1,]。也就是说,当二进制值不以1结尾时,在最后都会生成一个空数组项(在IE和Firefox中没有这个问题)。

思考后发现,其实并不需要使用正则的方式来计算1的个数,只要把1当做split方法的参数,把1作为分隔符,分出的数组的长度应该是1的个数加1。
复制代码 代码如下:

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

这样就不用采用正则的方法,也兼容了各主流浏览器,而且它的效率完全不低于使用for遍历的方法。

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

相关文章

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

    js switch case default 的用法示例介绍

    switch case default的用法应该存在一部分人不会使用吧,其实很简单就是每个case后,一定要加:break;default,就相当于else,不会的朋友可以了解下
    2013-10-10
  • layDate日期控件使用方法详解

    layDate日期控件使用方法详解

    这篇文章主要为大家详细介绍了layDate日期控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 简单实现js悬浮导航效果

    简单实现js悬浮导航效果

    这篇文章主要教大家如何简单实现js悬浮导航效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • js实现点击向下展开的下拉菜单效果代码

    js实现点击向下展开的下拉菜单效果代码

    这篇文章主要介绍了js实现点击向下展开的下拉菜单效果代码,涉及javascript鼠标事件控制页面元素样式变换的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 有关js的变量作用域和this指针的讨论

    有关js的变量作用域和this指针的讨论

    在ECMAScript中,只有两种执行环境,全局环境和函数环境,每个函数都是一个执行环境,包括嵌套函数。换句话说,其他情况下即使变量声明在一对大括号中,在括号外部仍然可以访问这些变量
    2010-12-12
  • js定时器实现倒计时效果

    js定时器实现倒计时效果

    这篇文章主要为大家详细介绍了js定时器实现倒计时效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • JS Replace 全部替换字符的用法小结

    JS Replace 全部替换字符的用法小结

    本篇文章主要是对JS Replace 全部替换字符的用法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • Unicode 编码转换器

    Unicode 编码转换器

    Unicode 编码转换器...
    2007-01-01
  • JavaScript代码模拟鼠标自动点击事件示例

    JavaScript代码模拟鼠标自动点击事件示例

    这篇文章主要介绍了JavaScript代码模拟鼠标自动点击事件示例,文章通过示例代码和运行效果图介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • JavaScript 组件之旅(三):用 Ant 构建组件

    JavaScript 组件之旅(三):用 Ant 构建组件

    我们走到哪儿了?前两期思考了太多东西,你是否已有倦意?别担心,本期的话题很轻松,你只需要简单了解一些语法,写几行配置,就能驱使系统按你预设的方式自动完成一些工作。
    2009-10-10

最新评论