将“boolean bit array”转换为Typescript中的数字

时间:2016-02-09 16:07:23

标签: javascript typescript

我有一个“布尔位数组”,

array:Array = [false, true, false, true]; // 0101

如何获得5号?感谢

3 个答案:

答案 0 :(得分:4)

我不知道TS,在纯粹的JS中



a = [false, true, false, true]
b = a.reduce((res, x) => res << 1 | x)
alert(b)
&#13;
&#13;
&#13;

执行相反的操作(即数组到数组):

&#13;
&#13;
b = 5
a = b ? [] : [false]

while(b) {
  a.push((b & 1) === 1)
  b >>= 1
}

alert(a)
&#13;
&#13;
&#13;

&#13;
&#13;
b = 5

a = b.toString(2).split('').map(x => x === '1');

alert(a)
&#13;
&#13;
&#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