我的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的字符串或数组(除非有人知道更简单的方法)。
答案 0 :(得分:6)
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]
答案 1 :(得分:2)
实现此目标的一种可能方法是使用toString(2)
将整数值转换为二进制字符串。然后,您可以遍历字符串,并将option
设置为与字符串索引匹配的1
(如果值是$('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>
file_id
答案 2 :(得分:0)
我不知道这是否是最佳方法,但这是我的解决方案。
首先,我将给定的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>
答案 3 :(得分:0)
您似乎正在尝试查找一个既包含数字又包含数字的数组:
您可以使用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]