Quick Take

import { strict as assert } from "assert";
import { rInvert } from "ranges-invert";

assert.deepEqual(
  rInvert(
    [
      [3, 5],
      [5, 7],
    ],
    9 // string length needed to set the boundary
  ),
  [
    [0, 3],
    [7, 9],
  ]
);

API

rInvert(arr, strLen, [opts])
Input argument Type Obligatory? Description
arrOfRanges Array of zero or more arrays yes Provide an array of ranges to invert. Ranges do not have to be sorted or merged.
strLen Integer number yes Algorithm needs to know the length of the reference string to calculate the inverted last slice's ending index.
opts Plain object no Optional options go here.

Output: null OR array of zero or more arrays (so-called ranges) where each consists of two or more natural number (or zero) indexes.

This package does not mutate the input array, instead it creates and returns a new array with ranges inverted.

Options object

options object's key Type Obligatory? Default Description
strictlyTwoElementsInRangeArrays Boolean no false If set to true, all ranges must have two and only two elements, otherwise an error will be thrown. For example, input being [ [1, 2, 'zzz'] ] would throw (because of 3 elements), as well as [ ['a'] ] (1 element).
skipChecks Boolean no false If set to true, no checks will be performed. It's handy to cut corners for perf reasons when you know input ranges are clean.

Changelog

See it in the monorepo opens in a new tab, on GitHub.

Contributing

To report bugs or request features or assistance, raise an issue on GitHub opens in a new tab.

Any code contributions welcome! All Pull Requests will be dealt promptly.

Licence

MIT opens in a new tab

Copyright © 2010–2021 Roy Revelt and other contributors

Related packages:

📦 ranges-is-index-within 2.1.0
Checks if index is within any of the given string index ranges
📦 ranges-crop 4.1.0
Crop array of ranges when they go beyond the reference string's length
📦 ranges-sort 4.1.0
Sort string index ranges
📦 ranges-process-outside 4.1.0
Iterate string considering ranges, as if they were already applied
📦 ranges-apply 5.1.0
Take an array of string index ranges, delete/replace the string according to them
📦 ranges-iterate 2.1.0
Iterate a string and any changes within given string index ranges
📦 ranges-push 5.1.0
Gather string index ranges