在javascript中获取第1位的所有位置?

时间:2016-10-12 10:11:26

标签: javascript

我提供了二进制文件,例如01001,并希望获得第1位的位置,因此我希望它会返回[0, 3]

javascript是否提供任何功能来获取第1位的所有位置?

3 个答案:

答案 0 :(得分:1)

如果是数字,请先将其转换为字符串,如果是字符串则可以:

positionArray = [];
binary.split('');

for (i = 0; i < binary.length; i++){
  if (binary[i] == "1"){
    positionArray.push(i);
  }
}

return positionArray;

我实际上在做的是将字符串转换为字符的数组(或数字到字符串到数组),然后遍历每个条目以找到每个'1'的位置。

不确定你是否可以用数字这样做,这就是我建议事先将它转换为字符串的原因。这只是一个粗略的解决方案,我打赌有更好的方法,但希望它有所帮助。

答案 1 :(得分:1)

如果你正在处理字符串,@ pibsyJr有一个很好的解决方案。但是,如果从数字开始,则将其转换为字符串是不必要的开销。您可以使用此功能有效地执行此操作:

function get_idxs(x) {
    var arr = [];
    var idx = 0;
    while (x) {
        if (x & 1) {
            arr.push(idx);
        }
        idx++;
        x >>= 1;
    }
    return arr;
}

> get_idxs(0b1001);
[0, 3]

警告:它不适用于负数。不幸的是,对于负数,问题的答案取决于底层的cpu架构。

答案 2 :(得分:1)

MDN有一段有用的代码,可以在数字上运行,并且会使用9或二进制0b1001这样的数字,并返回一个具有true / false值的数组,具体取决于是否在输入值。对于1001,它返回[true, false, false, true]

然后,您可以通过检查哪些索引为true并获取[0,3]

来使用此数组来创建所需的输出

MDN代码段在这里:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Reverse_algorithm_an_array_of_booleans_from_a_mask

这里有一个使用它的简单例子:

https://repl.it/DuEh/5