我有一个“布尔位数组”,
array:Array = [false, true, false, true]; // 0101
如何获得5号?感谢
答案 0 :(得分:4)
我不知道TS,在纯粹的JS中
a = [false, true, false, true]
b = a.reduce((res, x) => res << 1 | x)
alert(b)
&#13;
执行相反的操作(即数组到数组):
b = 5
a = b ? [] : [false]
while(b) {
a.push((b & 1) === 1)
b >>= 1
}
alert(a)
&#13;
或
b = 5
a = b.toString(2).split('').map(x => x === '1');
alert(a)
&#13;
答案 1 :(得分:0)
这对我来说适用于打字稿。
async maskBoolToInt(boolArray:boolean[]){
let debugmode = true;
if(debugmode){
console.log('Debug : "maskBoolToInt" Started');
console.log('boolArray = ' + boolArray);
}
let bitArray:number[] = [];
boolArray.forEach((element) => {
bitArray.push(+element); //convert bool to bit
});
if(debugmode){
console.log('bitArray = ' + bitArray);
}
let result: any = bitArray.reduce((accumulator: number, currentValue: number) => accumulator << 1 | currentValue); //bitwise conversion to integer
if(debugmode){
console.log('result = ' + result);
console.log('Debug : "maskBoolToInt" Finished');
}
return result
};
答案 2 :(得分:0)
我会使用带有字符串拆分/连接功能的简单数字/基数来做到这一点。
const numberToBoolArr = (n: number): Array<boolean> => (n).toString(2).split('').map(r => r === '1')
const boolArrToNumber = (arr: Array<boolean>): number =>
parseInt(arr.map(r => r ? '1' : '0').join(''), 2)
使用 boolArrToNumber
,您可以验证:
console.log(boolArrToNumber([false, true, false, true])) // 5