nv-facutil-simple-table

simple small table

Usage no npm install needed!

<script type="module">
  import nvFacutilSimpleTable from 'https://cdn.skypack.dev/nv-facutil-simple-table';
</script>

README

nv-facutil-simple-table

  • nv-facutil-simple-table simple table
  • simplified version of nvdtb
  • less apis but easy to use

install

  • npm install nv-facutil-simple-table

usage

example

const {Stable} = require("nv-facutil-simple-table");


var tbl = new Stable(['name','class','year'])
tbl.append_row(['john','A',15])
tbl.append_row(['jane','B',12])
tbl.append_row(['dave','B',10])

/*
> tbl
name | class | year
-------------------
john |     A |   15
-------------------
jane |     B |   12
-------------------
dave |     B |   10
-------------------
>
*/


var tbl = new Stable(['name','class','year'])
tbl.append_row({name:'john',class:'A',year:15})
tbl.append_row({name:'jane',class:'B',year:12})
tbl.append_row({name:'dave',class:'B',year:10})




tbl.srch((r)=>r.class==='B')

/*
> tbl.srch((r)=>r.class==='B')
[ [ 'jane', 'B', 12 ], [ 'dave', 'B', 10 ] ]
>
*/


/*
> tbl.cnl_
[ 'name', 'class', 'year' ]
> tbl.colnum_
3
> tbl.rownum_
3
> tbl.size_
9
> tbl.cnmirr_
SimpleMirr(6) [Map] {
  0 => 'name',
  'name' => 0,
  1 => 'class',
  'class' => 1,
  2 => 'year',
  'year' => 2
}
>
*/

/*
> tbl.col(1)
[ 'A', 'B', 'B' ]
> tbl.col('class')
[ 'A', 'B', 'B' ]
>
> tbl.row(1)
[ 'jane', 'B', 12 ]
>
> tbl.ele(2,'year')
10
> tbl.ele(2,'name')
'dave'
>

*/


/*
> tbl.rm_row(1)
[ 'jane', 'B', 12 ]
> tbl
name | class | year
-------------------
john |     A |   15
-------------------
dave |     B |   10
-------------------
>

*/


/*
> tbl.insert_row_after(0,[ 'jane', 'B', 12 ])
[ 1, [ 'jane', 'B', 12 ] ]
> tbl
name | class | year
-------------------
john |     A |   15
-------------------
jane |     B |   12
-------------------
dave |     B |   10
-------------------
>
tbl.rm_row(1)
[ 1, [ 'jane', 'B', 12 ] ]


tbl.insert_row_after(0,{name:'jane',year:12,class:'B'})

> tbl
name | class | year
-------------------
john |     A |   15
-------------------
jane |     B |   12
-------------------
dave |     B |   10
-------------------
>

*/


/*
> tbl.sort()
undefined
> tbl
name | class | year
-------------------
dave |     B |   10
-------------------
jane |     B |   12
-------------------
john |     A |   15
-------------------
>
> tbl.sort(false,['year','class','name'])
undefined
> tbl
name | class | year
-------------------
dave |     B |   10
-------------------
jane |     B |   12
-------------------
john |     A |   15
-------------------
>

*/

/*
tbl.append_col('lang',['es','en','zh'])
> tbl
name | class | year | lang
--------------------------
dave |     B |   10 |   es
--------------------------
jane |     B |   12 |   en
--------------------------
john |     A |   15 |   zh
--------------------------
>

*/


/*
> tbl.dump()
{
  cnl: [ 'name', 'class', 'year', 'lang' ],
  mat: [
    [ 'dave', 'B', 10, 'es' ],
    [ 'jane', 'B', 12, 'en' ],
    [ 'john', 'A', 15, 'zh' ]
  ]
}
>
> var dtb = tbl.todtb()
[
  { name: 'dave', class: 'B', year: 10, lang: 'es' },
  { name: 'jane', class: 'B', year: 12, lang: 'en' },
  { name: 'john', class: 'A', year: 15, lang: 'zh' }
]
>
> Stable.load_from_dtb(dtb)
name | class | year | lang
--------------------------
dave |     B |   10 |   es
--------------------------
jane |     B |   12 |   en
--------------------------
john |     A |   15 |   zh
--------------------------
>

*/

/*
> tbl.flat_filter((ele,rowseq,cn,colseq)=>ele[0]==='j')
[ 'john', 'jane' ]
>

*/

METHODS

getter

 tbl.cnl_     =>Array<any>
 tbl.cnmirr_  =>SimpleMirr
 tbl.colnum_  =>number
 tbl.rownum_  =>number
 tbl.mat_     =>Array<Array<any>>
 tbl.size_    =>number

 tbl.cn     (col_index:number)                 =>string
 tbl.colseq (col_name:string)                  =>number
 tbl.col    (k:number|string)                  =>Array<any>
 tbl.row    (index:number)                     =>Array<any>
 tbl.ele    (row_index:number,k:number|string) => any                   

operation

 type Row =  Array<any> | Object
 type Col =  Array<any>

 tbl.append_row(row:Row)                   =>[row_index:number,Row]
 tbl.append_col(col_name:string,col:Col)   =>[col_index:number,Col]  
 
 tbl.prepend_row(row:Row)                  =>[row_index:number,Row]
 tbl.prepend_col(col_name:string,col:Col)  =>[col_index:number,Col]
                       
                      
 tbl.insert_row_before(row_index:number,row:Row)  =>[row_index:number,Row]
 tbl.insert_row_after (row_index:number,row:Row)  =>[row_index:number,Row]
 
 tbl.insert_col_before(k:number|string, col_name:string, col:Col) =>[col_index:number,Col]             
 tbl.insert_col_after(k:number|string, col_name:string,  col:Col) =>[col_index:number,Col]


 tbl.rm_row(row_index:number)                  => Row
 tbl.rm_col(k:number|string)                   => Col

 tbl.swap_row(row_index0:number,row_index1:number)
 tbl.swap_col(k0:number|string,  k1:number|string)  

query

  type MatchF = (row:Object,row_index:number) =>Boolean  
  type SortF  = (ele:any,k:string)=> 0|1|-1 

  type FltrF  = (ele:any,row_index:number,col_name:string,colseq:number) => Boolean 

  tbl.srch(f:MatchF)                      => Array<Array<any>>
  tbl.sort(
      reverse:boolean,
      cmp_keys:undefined|Array<string>,
      cmp_funcs:undefined|Array<SortF>
  )                                       
                 
  tbl.flat_filter(f:FltrF)               => Array<any>   

dump

interface Dumped {
    cnl: Array<string>;
    mat: Array<Array<any>>;
}

type Dtb = Array<Object>;

tbl.dump()  =>Dumped
tbl.todtb() => Dtb

APIS


  • fac_stbl.cmmn.transpose_mat(mat:Array<Array>)
  • fac_stbl.Stable.load(dumped:Dumped):Stable
  • fac_stbl.Stable.load_from_dtb(dtb:Dtb):Stable

LICENSE

  • ISC