JSPM

nv-array-visitor

1.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q15082F
  • License ISC

array,nest,visitor

Package Exports

  • nv-array-visitor

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (nv-array-visitor) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

nv-array-visitor

  • nv-array-visitor

install

  • npm install nv-array-visitor

usage

const ary_visit = require("nv-array-visitor")

example

visit

replace,insert

var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]


ary_visit.visit(
    ary,
   (v,i,visitor,self)=> {
       if(self.is_leaf()) {
           if(typeof(v)==='number'){
               if(v%2) {
                   visitor.replace_after_leave(v+':odd')
               } else {
                   visitor.replace_after_leave(v+':even')
               }
           } else {
           }
       } else {
           if(self.state===ary_visit.STATE_DICT.before_enter) {
               visitor.insert_before("<");
           } else {
               visitor.insert_after(">");
           }
       }
   }
);

>ary
[
  '1:odd',
  '2:even',
  '<',
  [ '3:odd', '4:even' ],
  '>',
  '5:odd',
  '<',
  [ '6:even', '<', [ '7:odd' ], '>', '8:even' ],
  '>'
]

remove

 var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]

 ary_visit.visit(
     ary,
    (v,i,visitor,self)=> {
        if(self.is_leaf()) {
            if(typeof(v)==='number'){
                if(v%2) {
                    visitor.replace_after_leave(v+':odd')
                } else {
                    visitor.replace_after_leave(v+':even')
                }
            } else {
            }
        } else {
            visitor.remove_after_leave()
        }
    }
 );

 >ary

 [ '1:odd', '2:even', '5:odd' ]

self

var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]

ary_visit.visit(
    ary,
   (v,i,visitor,self)=> {
       console.log(v,self.depth_,self.pl_)
   }
);

/*
1 1 [ 0 ]
1 1 [ 0 ]
2 1 [ 1 ]
2 1 [ 1 ]
[ 3, 4 ] 1 [ 2 ]
3 2 [ 2, 0 ]
3 2 [ 2, 0 ]
4 2 [ 2, 1 ]
4 2 [ 2, 1 ]
[ 3, 4 ] 1 [ 2 ]
5 1 [ 3 ]
5 1 [ 3 ]
[ 6, [ 7 ], 8 ] 1 [ 4 ]
6 2 [ 4, 0 ]
6 2 [ 4, 0 ]
[ 7 ] 2 [ 4, 1 ]
7 3 [ 4, 1, 0 ]
7 3 [ 4, 1, 0 ]
[ 7 ] 2 [ 4, 1 ]
8 2 [ 4, 2 ]
8 2 [ 4, 2 ]
[ 6, [ 7 ], 8 ] 1 [ 4 ]

*/

SELF

  SELF_DICT: {
    is_leaf: 'is leaf',
    is_lst: 'is last element',
    pl_: 'index path list',
    depth_: 'which layer',
    state: 'open<before_enter>  or close<after_leave>'
  },

ACTION

   ACTION_DICT: {
     skip: 'visitor.skip()',
     insert_before: 'visitor.insert_before(val)',
     insert_after: 'visitor.insert_after(val)',
     remove_before_enter: 'visitor.remove_before_enter(),will NOT visit the decendants',
     remove_after_leave: 'visitor.remove_after_leave(),will be removed after visiting the decendants',
     replace_before_enter: '\n' +
       'visitor.replace_before_enter(new_value),\n' +
       'will NOT visit the old_val,\n' +
       'will visit the new_value',
     replace_after_leave: '\n' +
       'visitor.replace_after_leave(new_value),\n' +
       'will visit the old_val,\n' +
       'will NOT visit the new_value'
   }

STATE

 STATE_DICT: { before_enter: 'open', after_leave: 'close' } 

flat

 > var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]
 > ary_visit.flat(ary)
 [
   1, 2, 3, 4,
   5, 6, 7, 8
 ]
 >

dcp

 > var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]
 > var cloned = ary_visit.dcp(ary)
 > cloned
 [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]
 > cloned[2]
 [ 3, 4 ]
 > ary[2]
 [ 3, 4 ]
 > cloned[2] !== ary[2]
 true
 >

indexify

  > var ary = [ 1, 2, [ 3, 4 ], 5, [ 6, [ 7 ], 8 ] ]
  > ary_visit.indexify(ary)
  [
    { ___index: 0, ___value: 1 },
    { ___index: 1, ___value: 2 },
    [ { ___index: 0, ___value: 3 }, { ___index: 1, ___value: 4 } ],
    { ___index: 3, ___value: 5 },
    [
      { ___index: 0, ___value: 6 },
      [ [Object] ],
      { ___index: 2, ___value: 8 }
    ]
  ]
  > ary
  [
    { ___index: 0, ___value: 1 },
    { ___index: 1, ___value: 2 },
    [ { ___index: 0, ___value: 3 }, { ___index: 1, ___value: 4 } ],
    { ___index: 3, ___value: 5 },
    [
      { ___index: 0, ___value: 6 },
      [ [Object] ],
      { ___index: 2, ___value: 8 }
    ]
  ]
  >

API

  • visit(array,(v,i,visitor,self)=> {/.../})

  • dfs_gen(array)

  • sedfs_gen(array)

  • visitor_gen(array,(v,i,visitor,self)=>{/..../})

  • is_leaf(array)

  • pl_get(array,index_path_list)

  • flat(array)

  • get_non_leafs(array)

  • dcp(array)

  • indexcify(array,idx_key="___index",val_key="___value")

RESTRICT

  • all element NOT array will be treated as leaf

LICENSE

  • ISC