Comparing version 1.0.2 to 1.1.0
@@ -1,3 +0,2 @@ | ||
'use strict'; | ||
/* eslint indent: 4 */ | ||
/* eslint indent: ["warn", 4] */ | ||
@@ -52,3 +51,2 @@ | ||
class DRange { | ||
@@ -68,8 +66,8 @@ constructor(a, b) { | ||
add(a, b) { | ||
var _add = (subrange) => { | ||
var i = 0; | ||
const _add = (subrange) => { | ||
let i = 0; | ||
while (i < this.ranges.length && !subrange.touches(this.ranges[i])) { | ||
i++; | ||
} | ||
var newRanges = this.ranges.slice(0, i); | ||
const newRanges = this.ranges.slice(0, i); | ||
while (i < this.ranges.length && subrange.touches(this.ranges[i])) { | ||
@@ -82,3 +80,3 @@ subrange = subrange.add(this.ranges[i]); | ||
this._update_length(); | ||
} | ||
}; | ||
@@ -95,8 +93,8 @@ if (a instanceof DRange) { | ||
subtract(a, b) { | ||
var _subtract = (subrange) => { | ||
var i = 0; | ||
const _subtract = (subrange) => { | ||
let i = 0; | ||
while (i < this.ranges.length && !subrange.overlaps(this.ranges[i])) { | ||
i++; | ||
} | ||
var newRanges = this.ranges.slice(0, i); | ||
let newRanges = this.ranges.slice(0, i); | ||
while (i < this.ranges.length && subrange.overlaps(this.ranges[i])) { | ||
@@ -120,5 +118,5 @@ newRanges = newRanges.concat(this.ranges[i].subtract(subrange)); | ||
intersect(a, b) { | ||
var newRanges = []; | ||
var _intersect = (subrange) => { | ||
var i = 0; | ||
const newRanges = []; | ||
const _intersect = (subrange) => { | ||
let i = 0; | ||
while (i < this.ranges.length && !subrange.overlaps(this.ranges[i])) { | ||
@@ -128,4 +126,4 @@ i++; | ||
while (i < this.ranges.length && subrange.overlaps(this.ranges[i])) { | ||
var low = Math.max(this.ranges[i].low, subrange.low); | ||
var high = Math.min(this.ranges[i].high, subrange.high); | ||
let low = Math.max(this.ranges[i].low, subrange.low); | ||
let high = Math.min(this.ranges[i].high, subrange.high); | ||
newRanges.push(new SubRange(low, high)); | ||
@@ -148,3 +146,3 @@ i++; | ||
index(index) { | ||
var i = 0; | ||
let i = 0; | ||
while (i < this.ranges.length && this.ranges[i].length <= index) { | ||
@@ -164,4 +162,23 @@ index -= this.ranges[i].length; | ||
} | ||
numbers() { | ||
return this.ranges.reduce((result, subrange) => { | ||
let i = subrange.low; | ||
while (i <= subrange.high) { | ||
result.push(i); | ||
i++; | ||
} | ||
return result; | ||
}, []); | ||
} | ||
subranges() { | ||
return this.ranges.map((subrange) => ({ | ||
low: subrange.low, | ||
high: subrange.high, | ||
length: 1 + subrange.high - subrange.low | ||
})); | ||
} | ||
} | ||
module.exports = DRange; |
{ | ||
"name": "drange", | ||
"version": "1.0.2", | ||
"version": "1.1.0", | ||
"description": "For adding, subtracting, and indexing discontinuous ranges of numbers", | ||
@@ -32,3 +32,3 @@ "keywords": [ | ||
"engines": { | ||
"node": ">=4" | ||
"node": ">=6" | ||
}, | ||
@@ -35,0 +35,0 @@ "license": "MIT", |
@@ -14,7 +14,7 @@ # drange | ||
var allNums = new DRange(1, 100); //[ 1-100 ] | ||
var badNums = DRange(13).add(8).add(60,80); //[8, 13, 60-80] | ||
var goodNums = allNums.clone().subtract(badNums); | ||
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 ] | ||
var randomGoodNum = goodNums.index(Math.floor(Math.random() * goodNums.length)); | ||
let randomGoodNum = goodNums.index(Math.floor(Math.random() * goodNums.length)); | ||
``` | ||
@@ -51,3 +51,3 @@ | ||
```js | ||
var drange = DRange() | ||
let drange = new DRange() | ||
drange.add(1, 10); | ||
@@ -58,2 +58,27 @@ drange.add(21, 30); | ||
### 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() | ||
@@ -60,0 +85,0 @@ Clones the drange, so that changes to it are not reflected on its clone |
@@ -1,2 +0,8 @@ | ||
declare namespace DRange {} | ||
declare namespace DRange { | ||
interface SubRange { | ||
low: number; | ||
high: number; | ||
length: number; | ||
} | ||
} | ||
@@ -55,4 +61,14 @@ /** | ||
toString(): string; | ||
/** | ||
* Get contained numbers | ||
*/ | ||
numbers(): number[]; | ||
/** | ||
* Get copy of subranges | ||
*/ | ||
subranges(): DRange.SubRange[]; | ||
} | ||
export = DRange; |
10453
217
108