javascript - 二进制数组需要有一个固定的长度
问题描述
我目前正在研究二进制编码器,完成后,应根据输入的十进制数检查某些复选框。
我已经有了将数字转换为数组的脚本。
数字 512 的输出将是[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
,这是我想要的。
但是数字 4 的输出当前是[1, 0, 0]
,我不希望发生这种情况。
我希望数组具有固定长度,因此 4 的输出应该是[0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
这是我目前拥有的代码:
document.getElementById('myDez').oninput =
document.getElementById('myDez').onblur = document.getElementById('myDez').onkeydown = function (event) {
if (event.which == 13 || event.type == 'blur' || event.type == 'input') {
var myDez = parseInt(this.value);
var myBin = myDez.toString(2);
document.getElementById('myBin').value = myBin;
var arr = [,,,,];
var arr = myBin.split('');
var numberArr = arr.map(Number);
}
console.log(numberArr);
}
先感谢您。
解决方案
您可以使用padStart(10, 0)
其中 10 是您想要的宽度。请注意,它padStart
不会截断,因此slice(-width)
如果您想确保大数字不超过您想要的宽度,您可以添加。
console.log([...(+"42").toString(2).padStart(10, 0)].map(Number));
用法:
const decToBin = (n, width=10) =>
(+n).toString(2).padStart(width, 0).slice(-width);
document.querySelector("input").addEventListener("keyup", e => {
document.querySelector("div").textContent = decToBin(e.target.value);
});
<input type="number">
<div></div>
推荐阅读
- java - 为什么 Espresso 不等待实际观看条件?
- key - Chocolatey 安装期间的产品密钥
- azure - Azure Powershell - 应用程序网关配置
- javascript - 将列表中的每个项目远程显示到实验室中每台计算机的显示器上
- javascript - 如何为带参数的事件处理程序做 ES 6 箭头?
- angular - 为什么以角度 2 从 Observable 中打印未定义的数据
- javascript - Zip 下载没有发生
- rxjs - RxJS groupBy 到多维数组
- html - ng-2 图表:无法让条形图轴从 0 开始
- python-sphinx - Sphinx:如何包含位于模块内但在类和方法之外的文档字符串/注释