Nobody Prefers Margarine
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    array_surgeonpublic

    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]
    }
    

    Keywords

    none

    install

    npm i array_surgeon

    Downloadslast 7 days

    2

    version

    0.5.0

    license

    none

    repository

    github.com

    last publish

    collaborators

    • avatar