How do I create bit array in Javascript?

后端 未结 8 708
别跟我提以往
别跟我提以往 2020-12-05 04:47

What is the best way of implementing a bit array in JavaScript?

8条回答
  •  失恋的感觉
    2020-12-05 05:38

    Something like this is as close as I can think of. Saves bit arrays as 32 bit numbers, and has a standard array backing it to handle larger sets.

    class bitArray {
      constructor(length) {
        this.backingArray = Array.from({length: Math.ceil(length/32)}, ()=>0)
        this.length = length
      }
      get(n) {
        return (this.backingArray[n/32|0] & 1 << n % 32) > 0
      }
      on(n) {
        this.backingArray[n/32|0] |= 1 << n % 32
      }
      off(n) {
        this.backingArray[n/32|0] &= ~(1 << n % 32)
      }
      toggle(n) {
        this.backingArray[n/32|0] ^= 1 << n % 32
      }
      forEach(callback) {
        this.backingArray.forEach((number, container)=>{
          const max = container == this.backingArray.length-1 ? this.length%32 : 32
          for(let x=0; x0, 32*container+x)
          }
        })
      }
    }
    let bits = new bitArray(10)
    bits.get(2) //false
    bits.on(2)
    bits.get(2) //true
    
    bits.forEach(console.log) 
    /* outputs:
    false
    false
    true
    false
    false
    false
    false
    false
    false
    false
    */
    
    bits.toggle(2)
    
    bits.forEach(console.log) 
    /* outputs:
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    */
    
    bits.toggle(0)
    bits.toggle(1)
    bits.toggle(2)
    
    bits.off(2)
    bits.off(3)
    bits.forEach(console.log) 
    /* outputs:
    true
    true
    false
    false
    false
    false
    false
    false
    false
    false
    */
    

提交回复
热议问题