diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/withinRange.js | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/withinRange.js b/lib/withinRange.js index 3408a5a..7b6aa18 100644 --- a/lib/withinRange.js +++ b/lib/withinRange.js @@ -1,10 +1,12 @@ /** * @param {Object} feature * @param {Object} rangeFeature + * @param {Object} options + * @param {boolean} options.matchParity - if the parity of the number must match the range to be considered within (eg. if true, then 2 would not be within 1-3 but would be within 2-4 or within 0-4) * * @returns {boolean} True if addr:housenumber of feature is within the range of addr:housenumber rangeFeature and all other addr:* attributes match */ -module.exports = (feature, rangeFeature) => { +module.exports = (feature, rangeFeature, options) => { const regexp = /^(?<pre>\D*)(?<num>\d*)(?<suf>\D*)$/ if ( @@ -33,7 +35,19 @@ module.exports = (feature, rangeFeature) => { Number(i.num) >= Number(from.num) && Number(i.num) <= Number(to.num) ) { // feature within featureRange (ignore prefix/suffix) - return true + if (options && options.matchParity) { + // if parity matches (ie. both number and from/to are even, or both are odd, but not one even and one odd) + if ( + ((Number(i.num) % 2) === (Number(from.num) % 2)) && + ((Number(i.num) % 2) === (Number(to.num) % 2)) + ) { + return true + } else { + return false + } + } else { + return true + } } else { return false } |