You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:54:01