只有一半的阵列通电



我想创建二进制到十进制计算器。当我尝试控制台记录这两个数组时(binary是0和1的数组,binarypos是2的幂的数字数组。

屏幕截图

然后我创建了一个更简单的版本,在控制台中制作,所以出错的几率降到了零。但是bug又出现了!

const x = Array(8).fill(1);
const xpos = Array(8).fill(0);
for (let i = 0; i < x.length; i++) {
xpos[x.length - 1 - i] = Number(x[i]);
xpos[i] = Math.pow(xpos[i] * 2, [i]);
}
console.log(xpos) // [1, 1, 1, 1, 16, 32, 64, 128]

我希望它看起来像这个

console.log(xpos) // [1, 2, 4, 8, 16, 32, 64, 128]

这个怎么样?

const x = Array(8).fill(1);
const xpos = x.map((n,i) => Math.pow(2,i));
console.log( xpos );

这样做不是更简单吗?

const x = Array(8).fill(1);
const xpos = [];
for (let i = 0, j=1; i < x.length ; i++, j*=2 ) {
xpos[i] = j;
}

或者你的屏幕截图表明你正在努力完成的事情:将一串二进制数字(01(转换为十进制表示,只需:

function binaryToDecimal( digits ) {
const isValid = /^[01]+$/.test(digits);
if (!isValid) {
throw new TypeError("bindDigits must be a string containing only '0' and '1'.");
}

let value = 0;
let p = 1;
for ( const d of digits.split('').map( d => +d ).reverse() ) {
value += d * p;
p *= 2;
}
return value;
}

最新更新