Javascript 从无符号整数中计算位
我正在尝试编写一个函数,该函数接受一个(无符号)整数作为输入,并返回该数字二进制表示形式中等于1的位数 示例:1234的二进制表示是10011010010,因此在本例中,函数应该返回5 以下是我的答案:Javascript 从无符号整数中计算位,javascript,Javascript,我正在尝试编写一个函数,该函数接受一个(无符号)整数作为输入,并返回该数字二进制表示形式中等于1的位数 示例:1234的二进制表示是10011010010,因此在本例中,函数应该返回5 以下是我的答案: var newArr; var count = 0; function countBits(num){ newArr = num.toString(2).split('').map(function(el){ if(el == '1') count
var newArr;
var count = 0;
function countBits(num){
newArr = num.toString(2).split('').map(function(el){
if(el == '1')
count++
});;
return count;
}
在我的程序中,当我调用countBits(7)时,它返回//3,但当我提交响应时,它说它返回//4。有人能看到我在基于问题的回答中遗漏了什么吗?你的问题是你在函数之外声明变量,所以当函数被多次调用时,他们会保留它们的值并增加计数 顺便说一句,如果不想创建另一个数组,也不应该使用
map
,所以最好这样做
function countBits(num){
var newArr = num.toString(2).split('').map(Number);
var count = 0;
for (var i=0; i<newArr.length; i++)
count += newArr[i];
}
return count;
}
您的问题是,您在函数之外声明变量,因此当函数被多次调用时,它们将保留其值,而只是增加计数 顺便说一句,如果不想创建另一个数组,也不应该使用
map
,所以最好这样做
function countBits(num){
var newArr = num.toString(2).split('').map(Number);
var count = 0;
for (var i=0; i<newArr.length; i++)
count += newArr[i];
}
return count;
}
查看在同一个号码上调用函数两次时发生的情况。他们的测试线束可能多次调用
countBits
。您从未将计数
重置为0
,因此它会将所有调用中计数的总数相加<代码>变量计数=0应该在函数内部而不是之前,并且您甚至不需要newArr
变量。您可以使用forEach
或reduce
而不是map。如果在它接受的回调函数中没有返回值,那么使用map
是没有意义的forEach
更有意义。查看在同一个号码上调用函数两次时发生的情况。可能是他们的测试线束调用了countBits
多次。您从未将计数
重置为0
,因此它会将所有调用中计数的总数相加<代码>变量计数=0应该在函数内部而不是之前,并且您甚至不需要newArr
变量。您可以使用forEach
或reduce
而不是map。如果在它接受的回调函数中没有返回值,那么使用map
是没有意义的forEach
更有意义。或者(长度-sumOfArray)或者(长度-sumOfArray)