# drange

> For adding, subtracting, and indexing discontinuous ranges of numbers

Latest version **2.0.1** (published 2020-07-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install drange
pnpm add drange
yarn add drange
bun add drange
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2020-07-21 |
| First published | 2018-02-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=6 |
| Dependencies | 0 |
| Unpacked size | 10.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | fent |
| Maintainers | fent |
| Keywords | discontinuous, range, set |

## Links

- npm: https://www.npmjs.com/package/drange
- Repository: https://github.com/fent/node-drange
- Homepage: https://github.com/fent/node-drange#readme
- Issues: https://github.com/fent/node-drange/issues
- npm.io page: https://npm.io/package/drange

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 2.0.1 (latest) — 2020-07-21
- 2.0.0 — 2018-09-20
- 1.1.1 — 2018-09-20
- 1.1.0 — 2018-09-15
- 1.0.2 — 2018-06-06
- 1.0.1 — 2018-03-05
- 1.0.0 — 2018-02-11

## README

# drange

For adding/subtracting sets of range of numbers.

[![Build Status](https://secure.travis-ci.org/fent/node-drange.svg)](http://travis-ci.org/fent/node-drange)
[![Dependency Status](https://david-dm.org/fent/node-drange.svg)](https://david-dm.org/fent/node-drange)
[![codecov](https://codecov.io/gh/fent/node-drange/branch/master/graph/badge.svg)](https://codecov.io/gh/fent/node-drange)

# Usage

```
const DRange = require('drange');

let allNums = new DRange(1, 100); //[ 1-100 ]
let badNums = DRange(13).add(8).add(60,80); //[8, 13, 60-80]
let goodNums = allNums.clone().subtract(badNums);
console.log(goodNums.toString()); //[ 1-7, 9-12, 14-59, 81-100 ]
let randomGoodNum = goodNums.index(Math.floor(Math.random() * goodNums.length));
```

# API
### new DRange([low], [high])
Creates a new instance of DRange.

### DRange#length
The total length of all subranges

### DRange#add(low, high)
Adds a subrange

### DRange#add(drange)
Adds all of another DRange's subranges

### DRange#subtract(low, high)
Subtracts a subrange

### DRange#subtract(drange)
Subtracts all of another DRange's subranges

### DRange#intersect(low, range)
Keep only subranges that overlap the given subrange

### DRange#intersect(drange)
Intersect all of another DRange's subranges

### DRange#index(i)
Get the number at the specified index

```js
let drange = new DRange()
drange.add(1, 10);
drange.add(21, 30);
console.log(drange.index(15)); // 25
```

### DRange#numbers()
Get contained numbers

```js
let drange = new DRange(1, 4)
drange.add(6);
drange.subtract(2);
console.log(drange.numbers()); // [1, 3, 4, 6]
```

### DRange#subranges()
Get copy of subranges

```js
let drange = new DRange(1, 4)
drange.add(6, 8);
console.log(drange.subranges());
/*
[
  { low: 1, high: 4, length: 4 },
  { low: 6, high: 8, length: 3 }
]
*/
```

### DRange#clone()
Clones the drange, so that changes to it are not reflected on its clone


# Install

    npm install drange

# Tests

Tests are written with [mocha](https://mochajs.org)

    npm test

# Integration with TypeScript

DRange includes TypeScript definitions.

```typescript
import * as DRange from "drange";
const range: DRange = new Drange(2, 5);
```

Use dtslint to check the definition file.

    npm install -g dtslint
    npm run dtslint

---
_Source: https://npm.io/package/drange · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
