首页 > 解决方案 > 二进制数组需要有一个固定的长度

问题描述

我目前正在研究二进制编码器,完成后,应根据输入的十进制数检查某些复选框。

我已经有了将数字转换为数组的脚本。
数字 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);

}

先感谢您。

标签: javascriptarraysfixed-length-array

解决方案


您可以使用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>


推荐阅读