JavaScript实现返回所有为2的幂的索引的数组问题求助
问题分析
你当前代码的核心错误在于逻辑和题目需求不匹配:
- 题目要求筛选索引为2的幂对应的数组元素,你写的判断条件是元素值能被
2^i整除且不等于1,和要求完全无关 - 遍历起点错误,0不是2的幂,不需要从i=0开始判断
- 未声明
newArray的变量关键字,会隐式创建全局变量,存在作用域污染风险
解决思路
判断正整数是2的幂可以用位运算技巧:满足n & (n - 1) === 0的正整数就是2的幂,原理是2的幂的二进制表示仅最高位为1,减1后所有低位变为1,按位与结果为0。
修正后代码
function secondPower(arr) { // 返回所有索引为2的幂对应的元素构成的数组 const newArray = []; // 从索引1开始遍历,0不是2的幂 for(let i = 1; i < arr.length; i++){ if((i & (i - 1)) === 0) { newArray.push(arr[i]); } } return newArray; }
验证结果
调用secondPower([1, 2, 3, 4, 5, 6, 7, 8])时,符合条件的索引为1、2、4,对应元素为2、3、5,返回结果为[2,3,5],和预期一致。
内容的提问来源于stack exchange,提问作者Rune Delamont
相关产品推荐
相关产品推荐

