§ Quick Take

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

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

§ API

invert(arr, strLen, [opts])
Input argumentTypeObligatory?Description
arrOfRangesArray of zero or more arraysyesProvide an array of ranges to invert. Ranges do not have to be sorted or merged.
strLenInteger numberyesAlgorithm needs to know the length of the reference string to calculate the inverted last slice's ending index.
optsPlain objectnoOptional options go here.

Output: 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 keyTypeObligatory?DefaultDescription
strictlyTwoElementsInRangeArraysBooleannofalseIf 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).
skipChecksBooleannofalseIf set to true, no checks will be performed. It's handy to cut corners for perf reasons when you know input ranges are clean.

§ Licence

MIT opens in a new tab

Copyright © 2010–2020 Roy Revelt and other contributors

Related packages:

📦 ranges-crop 2.1.3
Crop array of ranges when they go beyond the reference string's length
📦 ranges-apply 3.2.3
Take an array of string index ranges, delete/replace the string according to them
📦 ranges-merge 5.0.3
Merge and sort string index ranges
📦 ranges-regex 2.1.4
Integrate regex operations into Ranges workflow
📦 ranges-sort 3.13.3
Sort string index ranges
📦 ranges-iterate 1.1.48
Iterate a string and any changes within given string index ranges
📦 ranges-process-outside 2.2.35
Iterate string considering ranges, as if they were already applied