javascript 正在获取数组索引[已关闭]

ss2ws0br  于 2023-03-04  发布在  Java
关注(0)|答案(2)|浏览(94)

**已关闭。**此问题需要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]))
wlsrxk51

wlsrxk511#

let arr = [1,2,3,4,5,6,7,8,9,10];
let pow = [];
for (let i = 0; i < arr.length; i++) 
{
  if(arr[i] && (!(arr[i]&(arr[i]-1))))
  {
    pow.push(arr[i]);
  }
}

console.log(pow);

使用位移位

ujv3wf0j

ujv3wf0j2#

你的指数是正确的-你没有得到数字,但他们的立场
这可以缩短
使用Math测试数字是否为2的幂
第一个月
1也是2的幂(2**0)
这里,如果number是2的幂,我通过推送索引和number来reduce。我使用comma operator返回累加器。
函数本身和reduce使用arrow functions
如果只需要索引,请将acc.push({[i]:num})更改为acc.push(i)

const powerOfTwo = arr => arr
  .reduce((acc,num,i) => (((Math.log(num)/Math.log(2)) % 1 === 0) && acc.push({[i]:num}), acc),[]);   
console.log(powerOfTwo([1,2,3,4,5,6,7,8,9,10,64,1024]))

使用bitwise AND时甚至更短
&运算符对两个数字执行按位AND运算。num & -num将num的所有位设置为0,但最低有效的1位除外。
如果num是2的幂,则num-num只有这个最低有效位是公共的,如果是,则表达式返回num,如果不是,则返回0

const powerOfTwoIdx = arr => arr
  .reduce((acc, num,i) => ((num === (num & -num) && acc.push(i)),acc),[]) 
console.log(powerOfTwoIdx([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 64, 1024]))

const powerOfTwoFilter = arr => arr
  .filter(num => num === (num & -num)) 
console.log(powerOfTwoFilter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 64, 1024]))

相关问题