繁体   English   中英

编写一个将整数作为输入并将位数返回为二进制的函数

[英]Writing a function that takes an integer as input, and returns number of bits to binary

我正在进行代码战争练习,但它不接受我的解决方案,并引发类型错误:无法读取 null 的属性“长度”。 我在单独的 Chrome 窗口上检查了我的代码,它运行良好。 当使用任何整数调用该函数时,我会从二进制数中获取所有 1。 我究竟做错了什么?

var countBits = function(n) {
  var result = n.toString(2).match(/1/g).length;
  return result;
};

如果在函数中输入的字符不匹配,则应添加条件以检查空值。

var result = n.toString(2).match(/1/g) != null ? n.toString(2).match(/1/g).length : 0;

 var countBits = function(n) { var result = n.toString(2).match(/1/g) != null ? n.toString(2).match(/1/g).length : 0; return result; }; console.log(countBits('a'))

虽然将数字转换为字符串并使用正则表达式进行计数没有任何问题,但您也可以通过简单的数学运算来完成——只需连续除以 2 并查看数字 mod 2,直到将其减少为零。

 var countBits = function(n) { let s = 0; while (n > 0){ s += n % 2 n = Math.floor(n/2) } return s }; console.log(countBits(0)) console.log(countBits(2)) console.log(countBits(3)) console.log(countBits(1234))

如果字符串与您的正则表达式不匹配,这将返回错误。 做这样的事情。

var countBits = function(n) {
  var result = n.toString(2).match(/1/g);
  if (result){       
      return result.length;
  }
  return 0;
};

如果没有 1 ( 0 ), match将返回null 您可以改用filter

const countBits = n => [...n.toString(2)].filter(e => e === "1").length;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM