Javascript 从无符号整数中计算位

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

我正在尝试编写一个函数,该函数接受一个(无符号)整数作为输入,并返回该数字二进制表示形式中等于1的位数

示例:1234的二进制表示是10011010010,因此在本例中,函数应该返回5

以下是我的答案:

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)