繁体   English   中英

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

[英]How can I convert (binary) integer into array?

我的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,3和4。

据我所知,这可以使用jQuery触发器方法完成 -

$('#uploadSitesDecoded').val([1,2,4,8]).trigger('change');

所以我要做的是将15转换为字符串或数组为1,2,4,8(除非有人知道更简单的方法)。

parseInt(n, 10).toString(2)

这将为您提供n的逐位表示,然后您可以通过char循环遍历char以获得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] 8,4,2,1 [8, 4, 2, 1]

实现此目的的一种可能方法是使用toString(2)将整数值转换为二进制字符串。 然后,如果值为1 ,则可以遍历字符串并将与字符串索引匹配的option设置为选中。 像这样的东西:

 $('input').on('input', function() { var $options = $('#uploadSitesDecoded option'); var binaryString = parseInt(this.value, 10).toString(2); binaryString.split('').reverse().forEach(function(n, i) { $options.eq(i).prop('selected', n === '1'); }); }).trigger('input'); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="number" value="1" min="0" max="63" /><br /> <select multiple class="form-control" name="uploadSites[]" id="uploadSitesDecoded" size="8"> <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> 

我不知道这是否是最佳方式,但这是我的解决方案。 首先,我将给定的int更改为二进制而不是反转它。 然后循环遍历它以找到二进制中的1

 function dec2bin(dec){ return (dec >>> 0).toString(2); } function reverseString(str) { return str.split("").reverse().join(""); } $(document).ready(function() { var binary = reverseString(dec2bin(15)); var values = []; var step = 1; for (var i = 0; i < binary.length; i++) { if(parseInt(binary.charAt(i)) === 1){ values.push(step); } step *=2; } $('#uploadSitesDecoded').val(values).trigger('change'); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <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> 

看起来你正在尝试找到两个都是的数字数组:

  1. 2的幂(2 ^ n)
  2. 不到15岁

您可以使用Array.filter来完成此任务

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM