Написание функции, которая принимает целое число в качестве входных данных и возвращает количество бит в двоичную форму - PullRequest
2 голосов
/ 27 июня 2019

Я выполняю упражнение на кодовые войны, и оно не принимает мое решение, и выдает ошибку типа: Невозможно прочитать свойство 'length' с нулевым значением. Я проверил свой код в отдельном окне Chrome, и он отлично работает. Когда функция вызывается с любым целым числом, я получаю все 1 из двоичного числа. Что я делаю не так?

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

Ответы [ 4 ]

1 голос
/ 27 июня 2019

Хотя нет ничего плохого в том, чтобы превратить число в строку и считать с помощью регулярного выражения, вы также можете сделать это с помощью простой математики - просто делите непрерывно на 2 и смотрите на число 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))
0 голосов
/ 27 июня 2019

это вернет ошибку, если строка не соответствует вашему регулярному выражению. сделай что-нибудь подобное.

var countBits = function(n) {
  var result = n.toString(2).match(/1/g);
  if (result){       
      return result.length;
  }
  return 0;
};
0 голосов
/ 27 июня 2019

Если нет 1 с (0), match вернет null. Вы можете использовать filter вместо:

const countBits = n => [...n.toString(2)].filter(e => e === "1").length;
0 голосов
/ 27 июня 2019

Если вы вводите символ в функцию, она не может совпадать, вы должны добавить условие, чтобы проверить ноль.

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...