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