Javascript 如何将(二进制)整数转换为数组?

Javascript 如何将(二进制)整数转换为数组?,javascript,jquery,arrays,binary,Javascript,Jquery,Arrays,Binary,我的HTML代码中有以下表单选择字段- <select multiple class="form-control" name="uploadSites[]" id="uploadSitesDecoded"> <option value="1">Site 1</option> <option value="2">Site 2</option> <option value="4">Site 3</o

我的HTML代码中有以下表单选择字段-

<select multiple class="form-control" name="uploadSites[]" id="uploadSitesDecoded">
    <option value="1">Site 1</option>
    <option value="2">Site 2</option>
    <option value="4">Site 3</option>
    <option value="8">Site 4</option>
    <option value="16">Site 5</option>
    <option value="32">Site 6</option>
</select>
所以我要做的是将15转换成字符串或数组1,2,4,8(除非有人知道更简单的方法)。

parseInt(n,10)。toString(2)

这将为您提供n的逐位表示,然后您可以逐字符循环,以获得对应的2个值的幂:

let n = 15; // The number you want to turn into an array of power of 2
let array = [];
let binaryRepresentation = parseInt(n, 10).toString(2);
binaryRepresentation = binaryRepresentation.split("").reverse().join(""); // You need to reverse the string to get the power of 2 corresponding
for(let i = binaryRepresentation.length - 1; i >= 0; i--){
     if(binaryRepresentation[i] == 1){
         array.push(Math.pow(2, i));
     }
}
console.log(array); // Check the array

此示例将为您提供
[8,4,2,1]
实现此目的的一种可能方法是使用
toString(2)
将中的整数值转换为二进制字符串。然后,如果值是
1
,则可以循环字符串并将
选项设置为与字符串的索引相匹配的
。大概是这样的:

$('input')。在('input',function()上{
var$options=$(“#上传站点编码选项”);
var binaryString=parseInt(this.value,10).toString(2);
binaryString.split(“”).reverse().forEach(函数(n,i){
$options.eq(i).prop('selected',n='1');
});
}).触发器(“输入”)


场地1 站点2 场地3 站点4 站点5 站点6
我不知道这是否是最理想的方法,但这是我的解决方案。 首先,我将给定的int改为二进制,然后将其反转。然后循环查找二进制文件中的
1

功能dec2bin(dec){
返回(12月0日)。toString(2);
}
功能反向限制(str){
返回str.split(“”).reverse().join(“”);
}
$(文档).ready(函数(){
var二进制=反向限制(dec2bin(15));
var值=[];
var阶跃=1;
对于(var i=0;i

场地1
站点2
场地3
站点4
站点5
站点6

看起来您正在尝试查找一个数字数组,这两个数字都是:

  • 二次幂(2^n)
  • 少于15
  • 您可以使用Array.filter来完成此操作

    让powerOfTwo=[1,2,4,8,16,32,64]
    let result=powerOfTwo.filter(函数(项){
    退货项目<15
    })
    //结果应该是[1,2,4,8]
    
    万一有像我这样的人在猜测转换公式是什么,您能否详细说明您希望对15或任何数字运行什么逻辑以获得结果数组?事实上,我看到1+2+4+8=15,但这只是我的猜测。select涉及的事实的可能重复是外围的。问题的关键是数字转换。这些是二进制值,因此,例如1111(=15)将是站点1、2、3和4。为什么这看起来像是编写C的人进入web开发并决定使用布尔掩码作为选项,而不是只发送数组?谢谢!几乎是我要找的,但看起来6会返回[2,1]我的坏,你需要反转字符串,编辑我的答案。它现在应该像预期的那样工作,但是如果出现问题,请毫不犹豫地告诉我OP实际上是在寻找一个值数组,该数组表示输入值的二进制等价物的1位。这意味着,如果输入值是“6”而不是“15”,OP需要一个
    [2,4]
    数组,而您建议的方法将生成
    [1,2,4]
    数组。不过不用担心,OP的目标目前在问题细节中不是很清楚,您的答案是一种很好的、简单的生成问题示例输出的方法。
    let n = 15; // The number you want to turn into an array of power of 2
    let array = [];
    let binaryRepresentation = parseInt(n, 10).toString(2);
    binaryRepresentation = binaryRepresentation.split("").reverse().join(""); // You need to reverse the string to get the power of 2 corresponding
    for(let i = binaryRepresentation.length - 1; i >= 0; i--){
         if(binaryRepresentation[i] == 1){
             array.push(Math.pow(2, i));
         }
    }
    console.log(array); // Check the array
    
    let powerOfTwo = [1, 2, 4, 8, 16, 32, 64]
    
    let result = powerOfTwo.filter(function(item) {
      return item < 15
    })
    
    // the result should be [1, 2, 4, 8]