Javascript 如何将(二进制)整数转换为数组?
我的HTML代码中有以下表单选择字段-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
<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]