NPM package to find a sequence of values in an Array and replace/remove them.
CoffeeScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
src
test
.gitignore
README.md
package.json

README.md

array_surgeon

Find a consecutive group of elements in an array and remove or replace them.

Similar, but different to: array_pinch

The npm package, array_pinch, lets you define only the start and end points of the sequence:

pinch = require "pinch"
arr = [1,2,3,4,5,6]
pinch(arr).remove [2,5]
# ===> [ 1, 6 ]

Installation & Usage

shell> npm install array_surgeon

surgeon = require 'array_surgeon'

hay = [ 1, 2, 3, 4, 5, 6 ]

// You can use a regular array
surgeon(hay).remove [ 2, 5 ]
# ==> [ 1, 6 ]

surgeon(hay).replace [ 2, 5 ], "two", "->", "five"
# ==> [ 1, "two", "->", "five", 6 ]

You also get remove_all and replace_all:

hay = [ 1, 2, 3, 4, 1, 2, 3, 4 ]

surgeon(hay).remove_all [ 2, 3 ]
# ==> [ 1, 4, 1, 4 ]

surgeon(hay).replace_all [ 2, 3 ], "missing"
# ==> [ 1, "missing", 4, 1, "missing", 4 ]

Using Functions for Comparison

You can also use a function for comparision:

is_2 = (val) ->
  val is 2
  
is_3 = (val) ->
  val is 3
  
surgeon(hay).remove [ is_2, is_3 ]
# ==> [ 1,  4 ]

surgeon(hay).replace [ is_2, is_3 ], "missing"
# ==> [ 1, "missing", 4 ]

The comparison function also accepts two other arguments:

  • arr_i: the position of the value within the array.
  • finder_i: the position of the comparison function within the array of finders.

Example:

is_2 = (val, arr_i, finder_i) ->
  console.log "Checking #{val} at position #{arr_i} with finder at #{finder_i}"
  val is 2

Splats

is_4_to_6 = (v) ->
  v in [4, 5, 6]
  
is_4_to_6.is_splat = true

surgeon( [1, 2, 3, 4, 5, 6, 7] ).replace [ is_3, is_4_to_6 ], "taken"
# ==> [ 1, 2, "taken", 7]

Get Info on a Slice

You can also get info on the first slice that matches your slice:

surgeon(hay).describe_slice [ is_2, is_3 ]

# ==> 
{ 
  start_index: 1
  end_index:   3
  length:      2
  slice:       [2, 3]
  indexs:      [1, 2]
}

When using splats:

finders = [ is_3, is_4_to_6 ]
hay     = [ 1, 2, 3, 4, 5, 6, 7]
# ==>
{
  start_index: 2
  end_index:   6
  length:      4
  slice:       [3, [4, 5, 6]]
  indexs:      [2, 3, 4, 5]
}