[d24f17c] | 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
|
---|