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 | String | yes | Provide an array of ranges to invert. Ranges do not have to be sorted or merged. |
rangesArray | Array of zero or more arrays - OR - null | yes | Ranges to apply onto the string |
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.