Installation
Quick Take
API — rApply()
The main function rApply()
is imported like this:
It’s a function which takes three input arguments:
Input argument | Type | Obligatory | Description |
---|---|---|---|
str Type: String Obligatory: yes | |||
str | String | yes | Provide an array of ranges to invert. Ranges do not have to be sorted or merged. |
rangesArray Type: Array of zero or more arrays — OR — null Obligatory: yes | |||
rangesArray | Array of zero or more arrays — OR — null | yes | Ranges to apply onto the string |
progressFn Type: Function or something falsy Obligatory: no | |||
progressFn | Function or something falsy | no | Provide a callback function to report the progress — numbers 0 to 100 will be fed into it as the program advances. |
Function will return an amended string.
TIP: Check out ranges-push which helps to manage the rangesArray
. It has methods to add and retrieve the ranges. Also, it helps in cases where ranges overlap and helps to maintain the sorting order.
API — version
You can import version
:
The algorithm
We array.reduce()
your given ranges array, slicing the input string accordingly. If given ranges is not array but null
(meaning absence of ranges), the same string is returned.
In our case
Originally this library was part of email-comb, where we traversed HTML as a string and compiled an array of things to delete or replace later, in one go. The performance was important, so it was not a good idea to delete/replace things on the spot because each deletion slowed down the process. Instead, we traversed the string, compiled this to-do array, then did the deletion/replacement on the whole thing, once. This appears to be the fastest way.
We’re going to use this library in all our HTML processing libraries who work on HTML as on string, without parsing it.