如何编写JS函数返回数组中所有是2的幂的索引
问题修正方案
现有代码问题分析
- 当前代码的判断逻辑完全不符合需求:
arr[i] / (2 ** i) === 1等价于判断arr[i]等于2的当前索引次方,而非判断元素本身是2的幂。
实现思路
判断正整数是否为2的幂可以利用二进制特性:所有2的正整数次幂的二进制表示都只有1位是1,其余位为0,因此满足n & (n - 1) === 0,同时要排除0和负数的情况。如果对位运算不熟悉,也可以循环将数值除以2,直到无法被2整除,最后判断结果是否等于1即可。
修正后代码
function secondPower(arr) { let newarr = []; for(let i = 0; i < arr.length; i++){ const num = arr[i]; // 先排除非正整数,再用二进制特性判断 if(num > 0 && (num & (num - 1)) === 0){ newarr.push(i); } } return newarr; } // 测试你给出的输入用例 console.log(secondPower([1, 2, 4, 5, 7, 16])) // 输出结果为 [0, 1, 2, 5]
内容的提问来源于stack exchange,提问作者caseyle
相关产品推荐
相关产品推荐

