Skip to content

kdepp/list-split

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

list-split

list-split is a toolkit for list/string splitting, it's inspired by Haskell's Data.List.Split

Installation

npm install --save list-split

Usage

// normal split
splitOn("&", "a=1&b=2&c=3")         // ["a=1", "b=2", "c=3"]

// multi delimeter 
splitOneOf("+-*", "11*23-5+9")      // ["11", "23", "5", "9"]

// simple predicate
splitWhen(x => x < 5, [7,8,3,2,9,6,1,5])        // [[7,8], [9,6], [5]]

// keep delimeters to the right
split(
    mergeDelimsRight,
    when(x => x.charCodeAt(0) >= 65 && x.charCodeAt(0) <= 90),
    "camelCaseHelloWorld"
)
// ["camel", "Case", "Hello", "World"]

// remove heading and trailing blanks, and remove delimeters
split(
    dot(dropInitialBlank, dropFinalBlank, dropDelims),
    oneOf("?&"),
    "?a=1&b=2&c=3&"
)
// ["a=1", "b=2", "c=3"]

API

Core

  • split(postProcess, predicates, list)
    • Split the list according to predicates, and do whatever you want in the postProcess
    • param: postProcess { Function }
    • param: predicates { [Function] }
    • param: list { Array | String }

for Predicates

  • oneOf(choices)

    Generate an array of one function based on the given choices

    • param: choices { Array | String }
  • onSubList(delim)

    Generate an array of functions based on the given delim. One function for one element in the delim.

    • param: delim { Array | String }
  • when(predicate)

    Just wrap the predicate in an array.

    • param: predicate { Function }

for postProcess

  • dropInitialBlank
split(dropDelims, oneOf(','), ",foo,bar")                           // ["","foo","bar"]
split(dot(dropDelims, dropInitialBlank), oneOf(','), ",foo,bar")    // ["foo","bar"]
  • dropFinalBlank
split(dropDelims, oneOf(','), "foo,bar,")                           // ["foo","bar",""]
split(dot(dropDelims, dropFinalBlank), oneOf(','), ",foo,bar")      // ["foo","bar"]
  • insertBlanks
    • insert a blank between two consecutive delimeters
split(dropDelims, oneOf(','), "foo;;bar")                           // ["foo","bar"]
split(dot(dropDelims, insertBlanks), oneOf(','), ",foo,bar")        // ["foo","","bar"]
  • dropDelims

    • as default, we will keep the delimeters in the result, but you can easily remove them with dropDelims
  • condense

    • combine consecutive delimeters into one element
split(id, oneOf(';'), "foo;;bar")                               // ["foo",";",";","bar"]
split(condense, oneOf(';'), ",foo;;bar")                         // ["foo",";;","bar"]
  • mergeDelimsLeft
    • merge the left most delimeters in a row with the left element
split(id, oneOf(';'), "foo;;bar")                               // ["foo",";",";","bar"]
split(mergeDelimsLeft, oneOf(';'), ",foo;;bar")                 // ["foo;", ";", "bar"]
  • mergeDelimsRight
    • merge the right most delimeters in a row with the right element
split(id, oneOf(';'), "foo;;bar")                               // ["foo",";",";","bar"]
split(mergeDelimsRight, oneOf(';'), ",foo;;bar")                 // ["foo", ";", ";bar"]
  • dot
    • combine the postProcess with dot (it's just function compose)
dot(dropInitialBlank, dropDelims)

Licence

MIT

About

handy toolkit for splitting string or list

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published