New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

js-bit-list

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

js-bit-list

Store arrays of boolean values in numbers.

  • 2.2.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

JavaScirpt Bit List

  • Bit list is a data structure which may be used to store arrays of boolean values in a number. This method allows such arrays to be used in places where the data shortness is important, e. g. in query string parameters.
  • This data structure plays with the binary representation of the numbers. Each element (named "bit") is just a bit of the number. To set the nth bit to true means to add pow(2, n) to the number, to set it to false means to subtract pow(2, n) from the number.

Examples

// Import the class
const BitList = require("js-bit-list");
// Create new bit list
let list = new BitList();
// Add some values
list.setBit(3, 1);
list.setBit(4, 1);
// Convert to number
let num = list.toNumber(); // Gives 2**3 + 2**4 = 24
// Convert to array
let arr = list.toArray(); // Gives [0, 0, 0, 1, 1]
// Predefined values
let predefinedList = new BitList([0, 0, 0, 1, 1, 0, 0]);
let predefinedListFromNumber = new BitList(31);

Working with objects

Bit list may work with objects so it is convenient to use it when you need to configure something. Imagine you have a list of cities and want to configure, which of them are available for delivery.

// Create a list of keys (your cities here)
const Cities = ["Moscow", "London", "Paris", "Prague"];
// Tip: extend BitList to use your own keys
const CitiesBitList = BitList.useKeys(Cities);
/**
 * v1.1.0- (not recommended)
 */
class CitiesBitList extends BitList {
  setObject(object) {
    return super.setObject(object, Cities);
  }

  toObject() {
    return super.toObject(Cities);
  }
}
/**
 * END v1.1.0-
 */
// Then use your class for configuration
let citiesOfRussia = new CitiesBitList().setObject({ Moscow: true });
// Convert to number
let citiesNumber = citiesOfRussia.toNumber();
// ...
// Later, convert it back to object
let citiesFromNumber = new CitiesBitList(citiesNumber).toObject();

New in v1.3.0: React support

The new useBitList() hook may be used in React applications.

import BitList from "js-bit-list";
import { useBitList } from "js-bit-list/hook";
const MyBitList = BitList.useKeys(["myKey"]);
const [list, setList] = useBitList(MyBitList, { myKey: 1 });
// Later
const listNumber = list.toNumber();
list.setObject({ myKey: 0 });
setList(list);

New in v2.2.0: .get(), .set(), .keys(), .enabledkeys(), .disabledKeys() and static .checkKey() methods in customized class:

const BitList = require("js-bit-list"); 
const FruitsBitList = BitList.useKeys(["apple", "banana", "orange"])
// .checkKey() 
FruitsBitList.checkKey("apple") // -> 0 
FruitsBitList.checkKey("tomato") // -> Error 
// .get() and .set()
const fruitsList = new FruitsBitList();
fruitsList.get("apple") // -> 0
fruitsList.set("orange", 1); 
fruitsList.get("orange") // -> 1
// .enabledKeys(), .disabledKeys(), .keys()
fruitsList.enabledKeys() // -> ["orange"]
fruitsList.disabledKeys() // -> ["apple", "banana"]
fruitsList.keys() // -> ["apple", "banana", "orange"]

See example.js for working example

Keywords

FAQs

Package last updated on 10 Nov 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc