**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在写一个算法,循环遍历一个数组,返回一个包含2的幂的索引的数组。然后我运行了一个预先写好的测试,但是很明显代码没有给予预期的结果。有人能帮我找出我逻辑中的缺陷吗?
function secondPower(arr) {
let powers = [];
let x;
for (let i = 0; i < arr.length; i++) {
//if odd, move on to next iteration
if (arr[i] % 2 !== 0) continue;
x = arr[i];
//keep dividing x for as long as x is even
do {
x = x / 2;
} while (x % 2 === 0);
//if x equals one, it must have been a power of 2.
///Put it in collection array
if (x === 1) powers.push(i);
}
return powers;
}
console.log(secondPower([1,2,3,4,5,6,7,8,9,10]))
2条答案
按热度按时间wlsrxk511#
使用位移位
ujv3wf0j2#
你的指数是正确的-你没有得到数字,但他们的立场
这可以缩短
使用Math测试数字是否为2的幂
第一个月
1也是2的幂(2**0)
这里,如果number是2的幂,我通过推送索引和number来reduce。我使用comma operator返回累加器。
函数本身和reduce使用arrow functions
如果只需要索引,请将
acc.push({[i]:num})
更改为acc.push(i)
使用bitwise AND时甚至更短
&
运算符对两个数字执行按位AND运算。num & -num
将num的所有位设置为0,但最低有效的1位除外。如果num是2的幂,则
num
和-num
只有这个最低有效位是公共的,如果是,则表达式返回num,如果不是,则返回0