1 | # drange
|
---|
2 |
|
---|
3 | For adding/subtracting sets of range of numbers.
|
---|
4 |
|
---|
5 | [](http://travis-ci.org/fent/node-drange)
|
---|
6 | [](https://david-dm.org/fent/node-drange)
|
---|
7 | [](https://codecov.io/gh/fent/node-drange)
|
---|
8 |
|
---|
9 | # Usage
|
---|
10 |
|
---|
11 | ```
|
---|
12 | const DRange = require('drange');
|
---|
13 |
|
---|
14 | var allNums = new DRange(1, 100); //[ 1-100 ]
|
---|
15 | var badNums = DRange(13).add(8).add(60,80); //[8, 13, 60-80]
|
---|
16 | var goodNums = allNums.clone().subtract(badNums);
|
---|
17 | console.log(goodNums.toString()); //[ 1-7, 9-12, 14-59, 81-100 ]
|
---|
18 | var randomGoodNum = goodNums.index(Math.floor(Math.random() * goodNums.length));
|
---|
19 | ```
|
---|
20 |
|
---|
21 | # API
|
---|
22 | ### new DRange([low], [high])
|
---|
23 | Creates a new instance of DRange.
|
---|
24 |
|
---|
25 | ### DRange#length
|
---|
26 | The total length of all subranges
|
---|
27 |
|
---|
28 | ### DRange#add(low, high)
|
---|
29 | Adds a subrange
|
---|
30 |
|
---|
31 | ### DRange#add(drange)
|
---|
32 | Adds all of another DRange's subranges
|
---|
33 |
|
---|
34 | ### DRange#subtract(low, high)
|
---|
35 | Subtracts a subrange
|
---|
36 |
|
---|
37 | ### DRange#subtract(drange)
|
---|
38 | Subtracts all of another DRange's subranges
|
---|
39 |
|
---|
40 | ### DRange#intersect(low, range)
|
---|
41 | Keep only subranges that overlap the given subrange
|
---|
42 |
|
---|
43 | ### DRange#intersect(drange)
|
---|
44 | Intersect all of another DRange's subranges
|
---|
45 |
|
---|
46 | ### DRange#index(i)
|
---|
47 | Get the number at the specified index
|
---|
48 |
|
---|
49 | ```js
|
---|
50 | var drange = new DRange()
|
---|
51 | drange.add(1, 10);
|
---|
52 | drange.add(21, 30);
|
---|
53 | console.log(drange.index(15)); // 25
|
---|
54 | ```
|
---|
55 |
|
---|
56 | ### DRange#numbers()
|
---|
57 | Get contained numbers
|
---|
58 |
|
---|
59 | ```js
|
---|
60 | var drange = new DRange(1, 4)
|
---|
61 | drange.add(6);
|
---|
62 | drange.subtract(2);
|
---|
63 | console.log(drange.numbers()); // [1, 3, 4, 6]
|
---|
64 | ```
|
---|
65 |
|
---|
66 | ### DRange#subranges()
|
---|
67 | Get copy of subranges
|
---|
68 |
|
---|
69 | ```js
|
---|
70 | var drange = new DRange(1, 4)
|
---|
71 | drange.add(6, 8);
|
---|
72 | console.log(drange.subranges());
|
---|
73 | /*
|
---|
74 | [
|
---|
75 | { low: 1, high: 4, length: 4 },
|
---|
76 | { low: 6, high: 8, length: 3 }
|
---|
77 | ]
|
---|
78 | */
|
---|
79 | ```
|
---|
80 |
|
---|
81 | ### DRange#clone()
|
---|
82 | Clones the drange, so that changes to it are not reflected on its clone
|
---|
83 |
|
---|
84 |
|
---|
85 | # Install
|
---|
86 |
|
---|
87 | npm install drange
|
---|
88 |
|
---|
89 | # Tests
|
---|
90 |
|
---|
91 | Tests are written with [mocha](https://mochajs.org)
|
---|
92 |
|
---|
93 | npm test
|
---|
94 |
|
---|
95 | # Integration with TypeScript
|
---|
96 |
|
---|
97 | DRange includes TypeScript definitions.
|
---|
98 |
|
---|
99 | ```typescript
|
---|
100 | import * as DRange from "drange";
|
---|
101 | const range: DRange = new Drange(2, 5);
|
---|
102 | ```
|
---|
103 |
|
---|
104 | Use dtslint to check the definition file.
|
---|
105 |
|
---|
106 | npm install -g dtslint
|
---|
107 | npm run dtslint
|
---|