@analys/table-lookup
Advanced tools
Comparing version 0.1.0 to 0.1.1
@@ -5,12 +5,56 @@ 'use strict'; | ||
/** | ||
* @param {Object<str,function(*):boolean>} filterObject | ||
* @return {Table|TableObject} - mutated 'this' {head, rows} | ||
*/ | ||
const tableLookup = function (filterObject) { | ||
for (let field in filterObject) if (filterObject.hasOwnProperty(field)) tableFindOnce.call(this, field, filterObject[field]); | ||
var enumLookups = require('@analys/enum-lookups'); | ||
var tableIndex = require('@analys/table-index'); | ||
var columnGetter = require('@vect/column-getter'); | ||
var entriesInit = require('@vect/entries-init'); | ||
var objectInit = require('@vect/object-init'); | ||
return this; | ||
const lookup = function (valueToFind, keyField, valueField) { | ||
const table = this, | ||
{ | ||
head, | ||
rows | ||
} = table, | ||
ki = head.indexOf(keyField), | ||
vi = head.indexOf(valueField); | ||
if (ki < 0 || vi < 0) return null; | ||
const row = rows.find(row => row[ki] === valueToFind); | ||
return row ? row[vi] : null; | ||
}; | ||
const lookupMany = function (valuesToFind, keyField, valueField) { | ||
const table = this, | ||
{ | ||
head, | ||
rows | ||
} = table, | ||
ki = head.indexOf(keyField), | ||
vi = head.indexOf(valueField); | ||
if (ki < 0 || vi < 0) return valuesToFind.map(() => null); | ||
return valuesToFind.map(v => { | ||
const row = rows.find(row => row[ki] === v); | ||
return row ? row[vi] : null; | ||
}); | ||
}; | ||
exports.tableLookup = tableLookup; | ||
const lookupTable = function (keyField, valueField, objectify = true) { | ||
const table = this, | ||
getColumn = columnGetter.Columns(table.rows); | ||
const [ki, vi] = [tableIndex.coin.call(table, keyField), tableIndex.coin.call(table, valueField)]; | ||
return ki >= 0 && vi >= 0 ? objectify ? objectInit.wind(getColumn(ki), getColumn(vi)) : entriesInit.wind(getColumn(ki), getColumn(vi)) : objectify ? {} : []; | ||
}; | ||
const lookupCached = function (valueToFind, keyField, valueField) { | ||
const table = this; | ||
let ds, dict; | ||
if (!(ds = table[enumLookups.VLKP]) || !(dict = ds.dict) || ds.key !== keyField || ds.value !== valueField) table[enumLookups.VLKP] = { | ||
dict: dict = lookupTable.call(table, keyField, valueField), | ||
key: keyField, | ||
value: valueField | ||
}; | ||
return dict[valueToFind]; | ||
}; | ||
exports.lookup = lookup; | ||
exports.lookupCached = lookupCached; | ||
exports.lookupMany = lookupMany; | ||
exports.lookupTable = lookupTable; |
@@ -1,11 +0,52 @@ | ||
/** | ||
* @param {Object<str,function(*):boolean>} filterObject | ||
* @return {Table|TableObject} - mutated 'this' {head, rows} | ||
*/ | ||
const tableLookup = function (filterObject) { | ||
for (let field in filterObject) if (filterObject.hasOwnProperty(field)) tableFindOnce.call(this, field, filterObject[field]); | ||
import { VLKP } from '@analys/enum-lookups'; | ||
import { coin } from '@analys/table-index'; | ||
import { Columns } from '@vect/column-getter'; | ||
import { wind as wind$1 } from '@vect/entries-init'; | ||
import { wind } from '@vect/object-init'; | ||
return this; | ||
const lookup = function (valueToFind, keyField, valueField) { | ||
const table = this, | ||
{ | ||
head, | ||
rows | ||
} = table, | ||
ki = head.indexOf(keyField), | ||
vi = head.indexOf(valueField); | ||
if (ki < 0 || vi < 0) return null; | ||
const row = rows.find(row => row[ki] === valueToFind); | ||
return row ? row[vi] : null; | ||
}; | ||
const lookupMany = function (valuesToFind, keyField, valueField) { | ||
const table = this, | ||
{ | ||
head, | ||
rows | ||
} = table, | ||
ki = head.indexOf(keyField), | ||
vi = head.indexOf(valueField); | ||
if (ki < 0 || vi < 0) return valuesToFind.map(() => null); | ||
return valuesToFind.map(v => { | ||
const row = rows.find(row => row[ki] === v); | ||
return row ? row[vi] : null; | ||
}); | ||
}; | ||
export { tableLookup }; | ||
const lookupTable = function (keyField, valueField, objectify = true) { | ||
const table = this, | ||
getColumn = Columns(table.rows); | ||
const [ki, vi] = [coin.call(table, keyField), coin.call(table, valueField)]; | ||
return ki >= 0 && vi >= 0 ? objectify ? wind(getColumn(ki), getColumn(vi)) : wind$1(getColumn(ki), getColumn(vi)) : objectify ? {} : []; | ||
}; | ||
const lookupCached = function (valueToFind, keyField, valueField) { | ||
const table = this; | ||
let ds, dict; | ||
if (!(ds = table[VLKP]) || !(dict = ds.dict) || ds.key !== keyField || ds.value !== valueField) table[VLKP] = { | ||
dict: dict = lookupTable.call(table, keyField, valueField), | ||
key: keyField, | ||
value: valueField | ||
}; | ||
return dict[valueToFind]; | ||
}; | ||
export { lookup, lookupCached, lookupMany, lookupTable }; |
{ | ||
"name": "@analys/table-lookup", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"description": "A cross-table-lookup analytics tool", | ||
@@ -17,2 +17,9 @@ "main": "dist/index.cjs.js", | ||
}, | ||
"dependencies": { | ||
"@analys/enum-lookups": "^0.1.1", | ||
"@analys/table-index": "^0.1.1", | ||
"@vect/column-getter": "^0.1.16", | ||
"@vect/entries-init": "^0.1.16", | ||
"@vect/object-init": "^0.1.15" | ||
}, | ||
"repository": { | ||
@@ -38,3 +45,3 @@ "type": "git", | ||
"homepage": "https://github.com/hoyeungw/analys#readme", | ||
"gitHead": "6f24464c290f9c9da5910091de91bf6a711f84c4" | ||
"gitHead": "a28212513a341fb1e4caf2d8881c84bb1cf73679" | ||
} |
7421
101
5
+ Added@analys/enum-lookups@^0.1.1
+ Added@analys/table-index@^0.1.1
+ Added@vect/column-getter@^0.1.16
+ Added@vect/entries-init@^0.1.16
+ Added@vect/object-init@^0.1.15
+ Added@analys/enum-lookups@0.1.12(transitive)
+ Added@analys/table-index@0.1.12(transitive)
+ Added@vect/column-getter@0.1.16(transitive)
+ Added@vect/entries-init@0.1.16(transitive)
+ Added@vect/object-init@0.1.15(transitive)
+ Added@vect/vector-mapper@0.1.16(transitive)
+ Added@vect/vector-zipper@0.1.15(transitive)